草庐IT

vec_bool

全部标签

c++ - 我可以在 C++ 中获得非专用 vector<bool> 类型吗?

Avector专门用于减少空间消耗(每个元素1位),但访问速度比vector慢.有时我使用vector出于性能原因,但如果我转换char到bool,我的编译器(VisualC++)可能会生成一个C4800我不喜欢的警告。此外,我认为vector如果我将其视为未专门化的vector,则在语义上是错误的.那么,我能得到一个真正的非专业vector吗?键入C++? 最佳答案 不,你不能得到一个非特化的std::vector.vector是你最好的选择,因为你已经知道了。要绕过警告,只需使用bool表达式:boolb1=v[0]!=0;bo

c++ - 为什么 iostream 对象不重载 operator bool?

在thisanswer我谈到了使用std::ifstream对象到bool的转换来测试流是否仍处于良好状态。我查看了Josuttis的书以获取更多信息(如果您感兴趣,请参阅第600页),事实证明iostream对象实际上重载了operatorvoid*。当流是错误的(可以隐式转换为false)时它返回一个空指针,否则返回一个非空指针(隐式转换为true)。他们为什么不直接重载operatorbool? 最佳答案 看起来C++0x标准部分27.4.4.3有答案(强调我的)。operatorunspecified-bool-type()

bool 值或函数调用表达式中的 C++ 惰性求值

快速提问,在C++中这个表达式是否被惰性求值?boolfunca();boolfuncb();funca()||funcb();//lineinquestion显然这(可能)只是以下内容的简写:boolfunca();boolfuncb();if(!funca()){funcb();}//orevenmoreconcisely:if(!funca())funcb();C++会像我希望的那样评估有问题的原始行吗?谢谢。 最佳答案 在C/C++中,逻辑运算符短路。在中||b如果a为真b不计算,如果a为假则在a&&b中b未计算。注意:这只

c++ - Boost.Program_Options : When <bool> is specified as a command-line option, 什么是有效的命令行参数?

鉴于Boost.Program_Options的以下简单使用:boost::program_options::options_descriptionoptions("Options");options.add_options()("my_bool_flag,b",boost::program_options::value(),"Samplebooleanswitch)");...哪些命令行参数将评估为false,哪些评估为true?(即假设程序名为“foo”,并在命令行上执行为:foo-b?...问号是其他一些文本的占位符:所有可能的文本选项将正确评估为false,什么是true?)

c++ - 错误 : passing 'const T' as 'this' argument of 'bool T::operator<(T)' discards qualifiers

#include#include#includeclassMyData{public:intm_iData;booloperatormyvector(2,MyData());myvector[0].m_iData=2;myvector[1].m_iData=4;std::sort(myvector.begin(),myvector.end());}尝试编译这个给出:error:passing'constMyData'as'this'argumentof'boolMyData::operator 最佳答案 比较运算符将在类实例的常量引

c++ - 如何防止从 char 数组到 bool 的隐式转换

structFoo{voidsetBar(boolbar_){bar=bar_;}boolbar;};intmain(){Foof;f.setBar("true");}由于类型转换,上述代码编译成功,即使在需要bool的地方传递了一个char数组。是否有可能导致这段代码编译失败?(首选C++03解决方案,因为我工作场所的编译器很古老。)我查看了StackOverflow上的以下相关问题,但它们并没有完全解决这个问题。PreventingimplicitconversioninC++,Whydoesthecompilerchoosebooloverstringforimplicittyp

C++ 隐式转换为 bool

为了使我的枚举更加类型安全,我一直在使用宏生成的重载运算符来禁止将枚举与除相同类型的枚举之外的任何东西进行比较:#include#defineMAKE_ENUM_OPERATOR_TYPESAFE(enumtype,op)\template\inlinebooloperatorop(enumtypelhs,Trhs)\{\BOOST_STATIC_ASSERT(sizeof(T)==0);\returnfalse;\}\\template\inlinebooloperatorop(enumtypelhs,enumtyperhs)\{\returnstatic_cast(lhs)opst

c++ - 为什么转换为引用会干扰到 bool 值的转换?

似乎如果我有一个指向引用的转换运算符,这个运算符将优先于转换为bool。为什么会发生这种情况,我该如何解决?(如果重要的话,我使用的是GCC4.5。我在ideone上验证了GCC-4.7.2发现了相同的行为。)假设如下:classB{protected:constinta_;intb_;B(intb,inta):a_(a),b_(b){}public:operatorbool()const{returnb_==a_;}};classD1:publicB{public:D1(intb=0,inta=0):B(b,a){}operatorint()const{returnb_;}};cla

C++ 变体转换构造函数与 bool

关于cppreference(4)转换构造函数说明如下:Convertingconstructor.ConstructsavariantholdingthealternativetypeT_jthatwouldbeselectedbyoverloadresolutionfortheexpressionF(std::forward(t))iftherewasanoverloadofimaginaryfunctionF(T_i)foreveryT_ifromTypes...inscopeatthesametime,exceptthat:AnoverloadF(T_i)isonlyconsi

c++ - 在 c/c++ 中添加两个 bool 值

我试着把bool值加在一起,说:booli=0,j=0,k=0;cout结果为4,这意味着结果被转换为'int'值。我想问:这是C/C++的标准操作吗?编译器是否总是保证在溢出时将临时值转换为更大的类型?谢谢!感谢您的回答,一个跟进问题:说,如果我这样做:unsignedshorti=65535,j=65535;cout结果是4。为什么它被提升为'int'? 最佳答案 导致转换的不是溢出,而是你做算术的事实。在C++(以及行为起源的C)中,内置类型的基本算术运算符的操作数在进行计算之前经过一组定义明确的提升。这些规则中最基本的(有些