草庐IT

boost-implicit-cast

全部标签

c++ - 如何在 OSX 中安装 boost C++ 库

我下载了boostjam并将其放入安装文件中并尝试运行它,显示以下错误:error:error:noJamfileincurrentdirectoryfound,andnotargetreferencesspecified. 最佳答案 更现代的包管理器homebrew用一个做这个$brewinstallboost 关于c++-如何在OSX中安装boostC++库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

c++ - 不寻常的 static_cast 语法

我设法追踪到以下表达式的错误:foo(static_cast(a,b));//Executesspecialisation1右括号位置错误。正确的说法应该是:foo(static_cast(a),b);//Executesspecialisation2我从未见过static_cast与形式(a,b)一起使用,也从未在任何地方见过它的描述。这是什么意思?前面的语句返回b。 最佳答案 static_cast不是一个函数,它是一个关键字,所以a,b中的逗号不是参数分隔符;它是commaoperator.它评估a但丢弃结果。表达式的计算结果

c++ - 手动递增和递减 boost::shared_ptr?

有没有办法在C++中手动增加和减少shared_ptr的计数?我要解决的问题如下。我正在用C++编写一个库,但接口(interface)必须是纯C语言。在内部,我想使用shared_ptr来简化内存管理,同时保留通过C接口(interface)传递原始指针的能力。当我通过接口(interface)传递原始指针时,我想增加引用计数。然后客户端将负责调用一个函数,该函数将在不再需要传递的对象时减少引用计数。 最佳答案 也许您正在跨DLL边界使用boost::shared_ptr,这将无法正常工作。在这种情况下boost::intrusi

c++ - 模板中的 const_cast。有 unconst 修饰符吗?

我有一个这样的模板类:templateclassMyClass{T*data;}有时,我想像下面这样使用具有常量类型T的类:MyClassmci;但我想使用const_castdata修改数据(为什么不重要,但MyClass是一个引用计数智能指针类,它将引用计数保存在数据本身中。MyObject派生自某种包含计数的类型。数据不应该被修改,但计数必须被智能指针修改。)。有没有办法从T中移除常量性??虚构代码:const_cast(data)? 最佳答案 这里最简单的方法是使引用计数可变。但是,如果您对它如何与const_cast一起工

c++ - 为什么 static_cast 在逻辑上应该出于安全目的拒绝它们或者 static_cast 与安全无关时允许向下转换?

在下面的示例中,编译器接受static_cast向下转换,导致未定义的行为,而我认为static_cast完全是为了安全(C风格转换无法提供).#includeclassBase{public:intx=10;};classDerived1:publicBase{public:inty=20;};classDerived2:publicBase{public:intz=30;intw=40;};intmain(){Derived1d1;Base*bp1=static_cast(&d1);Derived2*dp1=static_cast(bp1);std::coutzw

c++ - boost 精简版?

我听说有一个简单的boost实现,其中只有智能指针和一些其他非常基本的东西。我想我听说它也不使用任何操作系统功能。我试着寻找它,但一无所获。有谁知道它叫什么或不需要操作系统调用的boost型智能指针的实现? 最佳答案 您可以使用bcp,但请记住,使用Boost库只会让您为使用的内容付费-智能指针都是以仅header方式实现的,这意味着没有操作系统调用,没有要链接到的编译库等。因此,如果您不分发源代码,您可以下载完整的boost集,并仅使用您需要的位,而不会给您的应用程序带来任何(未被要求的)麻烦。

c++ - dynamic_cast 是否在重载的运算符删除中工作?

我遇到了这个:structBase{void*operatornew(size_t);voidoperatordelete(void*);virtual~Base(){}//(p);if(dynamic_cast(pB)!=0){/*...NOTreachinghere?...*/}free(p);}现在如果我们这样做,Base*p=newDerived;deletep;令人惊讶的是,conditioninsidetheBase::deleteisnotsatisfied我做错了什么吗?或者从void*进行转换会丢失Derived*的信息? 最佳答案

c++ - 为什么这个 static_cast 是不允许的?

我有一个A类对象,我想将其分配到自定义堆栈对象上。为此,我只需将堆栈指针移动与对象大小相同的字节数并返回其先前的值:classA:publicB{};//Bisfromaprecompiledlibraryclassstack{public:stack(void):_top(&_storage[0]){}templateinlineT*push(void){T*ptr=static_cast(_top);_top+=sizeof(T);returnptr;}//...private:char_storage[1024];char*_top;};stack_stack;intmain(i

c++ - Boost 是否因为不像 Boost 那样有罪?

我刚刚阅读了Boost::SpiritLLParser框架的介绍。序言表明作者和创建者喜欢使用这种解析技术来读取程序选项。Boost没有自己的程序选项库吗?我想知道,Boost委员会是否审查了所有图书馆笔记的共同主题和风格?似乎每个库的文档都有自己的风格。对一个令人惊叹的软件的小提示,我只是觉得它很好奇。 最佳答案 简单地说,Spirit存在于Boost.Program-Options库之前。现在,我总是使用Boost.Program-Options而不是使用Spirit手动滚动我自己的。

c++ - 轻量级 boost::bind

我对pass-callback-data-as-void*-struct反模式感到厌烦。Boostbind很好地解决了它,但它是一个NotAcceptable依赖项。什么是轻量级替代品?我将如何尽可能简单地自己编写它? 最佳答案 首先,我质疑您关于它太重以至于您无法使用的说法。其次,如果您需要控制行为,请滚动您自己的模板。第三,如果你害怕滚动自己的模板,我怀疑你判断boost::bind太重以至于你无法使用的能力。 关于c++-轻量级boost::bind,我们在StackOverflo