草庐IT

c++ - Consexpr if 具有非 bool 条件

我似乎发现了Clang和GCC不同意的地方。代码如下:intmain(){ifconstexpr(2){}}使用GCC7.4.0编译成功,但使用Clang7.0.0编译失败,并显示以下错误消息:test.cpp:3:17:error:constexprifconditionevaluatesto2,whichcannotbenarrowedtotype'bool'[-Wc++11-narrowing]ifconstexpr(2){}^1errorgenerated.cppreference似乎没有提到“缩小”,所以这似乎是一个Clang错误,但我并不完全确定。如果这是任一编译器的错误,

c++ - 在 C++ 中转换为 bool 对性能有何影响?

[此问题与thisone相关但不相同。.]我的编译器警告将某些类型隐式转换或强制转换为bool,而显式转换不会产生警告:longt=0;boolb=false;b=t;//performancewarning:forcinglongtoboolb=(bool)t;//performancewarningb=bool(t);//performancewarningb=static_cast(t);//performancewarningb=t?true:false;//ok,nowarningb=t!=0;//okb=!!t;//ok这是VisualC++2008,但我怀疑其他编译器可能

c++ - 从 std::string 转换为 bool

将std::string转换为bool的最佳方法是什么?我正在调用一个返回“0”或“1”的函数,我需要一个干净的解决方案来将其转换为boolean值。 最佳答案 我很惊讶没有人提到这个:boolb;istringstream("1")>>b;或boolb;istringstream("true")>>std::boolalpha>>b; 关于c++-从std::string转换为bool,我们在StackOverflow上找到一个类似的问题: https://

c++ - 是 !!在 C++ 中转换为 bool 的安全方法?

[此问题与thisone相关但不相同。.]如果我尝试使用某些类型的值作为boolean表达式,我会收到警告。有时我不会抑制警告,而是使用三元运算符(?:)将其转换为boolean值。使用两个非运算符(!!)似乎做同样的事情。这就是我的意思:typedeflongT;//similarwarningwithvoid*ordoubleTt=0;boolb=t;//performancewarning:forcing'long'valueto'bool'b=t?true:false;//okb=!!t;//anydifferent?那么,双重非技术真的做同样的事情吗?它比三元技术更安全还是更

c++ - 为什么将指针转换为 bool 时会出现性能警告?

这个问题延伸到Whyuse!!whenconvertinginttobool?.当我做这样的事情时,我觉得我很酷:boolhasParent(){returnthis->parentNode;}当没有父节点时,this->parentNode为NULL。但我得到了:warningC4800:'Node*':forcingvaluetobool'true'or'false'(performancewarning)即使使用(bool)强制转换,警告仍然不会消失。怎么了,哟?为什么这是性能警告?我认为写这样的东西效率会降低:boolhasParent(){if(this->parentNod

c++ - std::is_unsigned<bool>::value 定义是否明确?

我想知道是否std::is_unsigned::value是否按照标准定义好?我问这个问题是因为typenamestd::make_unsigned::type没有很好的定义。 最佳答案 bool没有签名的概念.来自[basic.fundamental]/6:Valuesoftypeboolareeithertrueoffalse.[Note:Therearenosigned,unsigned,short,orlongbooltypesorvalues.—endnote]Valuesoftypeboolparticipateinin

c++ - 'bool' 是 C++ 中的基本数据类型吗?

我在编写一些代码时遇到了这个疑问。'bool'是C++标准中定义的基本数据类型,还是编译器提供的某种扩展?我有这个疑问是因为Win32有'BOOL'这不过是long的typedef。如果我这样做会发生什么:inti=true;“总是”保证变量i的值为1还是再次取决于我使用的编译器?此外,对于一些接受BOOL作为参数的Win32API,如果我传递bool变量会发生什么? 最佳答案 bool是C++中的基本数据类型。将true转换为整数类型将产生1,而将false转换将产生0(4.5/4和4.7/4)。在C中,直到C99,没有bool数

c++ - bool 运算符可以与预处理器一起使用吗?

我想知道是否可以使用预处理器OR或AND语句?我想在_DEBUG或_UNIT_TEST标签下运行此代码(?)。我想要的是如下内容:#if_DEBUG||_UNIT_TEST//Codehere#endif如果这是不可能的,是否有一种解决方法来实现相同的事情而不必使用#elseif复制代码? 最佳答案 #ifdefined_DEBUG||defined_UNIT_TEST//Codehere#endif您也可以使用AND和NOT运算符。例如:#if!defined_DEBUG&&defined_UNIT_TEST//Codehere#

types - 有没有办法将整数转换为 bool 值,反之亦然?

有没有一种内置方法可以将bool转换为整数,反之亦然?我尝试过正常的转换,但由于它们使用不同的底层类型,转换不可能是经典的方式。我倒了一些规范,但我还没有找到答案。 最佳答案 Inttobool很简单,只需x!=0就可以了。反过来,由于Go不支持三元运算符,你必须这样做:varxintifb{x=1}else{x=0}你当然可以把它放在一个函数中:funcBtoi(bbool)int{ifb{return1}return0}整数有很多可能的bool解释,但它们都不一定是自然的,所以不得不说出你的意思是有道理的。根据我的经验(YMMV

JSON golang bool 省略

我在为api编写golang库时遇到问题。bool值的json方面导致了问题。假设对于api调用,bool值的默认值为true。如果我这样做了SomeValuebool`json:some_value,omitempty`并且我没有通过库设置值,该值将设置为true。如果我在库中将该值设置为false,则omitempty表示false值为空值,因此该值将通过api调用保持为true。让我们去掉省略号,让它看起来像这样SomeValuebool`json:some_value`现在我遇到了相反的问题,我可以将值设置为false,但如果我不设置该值,那么即使我希望它为true,该值也会为