草庐IT

c++ - 哪个更快 : if (bool) or if(int)?

Whichvalueisbettertouse?BooleantrueorInteger1?上面的题目让我在if条件下用bool和int做了一些实验。所以出于好奇,我写了这个程序:intf(inti){if(i)return99;//if(int)elsereturn-99;}intg(boolb){if(b)return99;//if(bool)elsereturn-99;}intmain(){}g++intbool.cpp-S为每个函数生成asm代码如下:f(int)的asm代码__Z1fi:LFB0:pushl%ebpLCFI0:movl%esp,%ebpLCFI1:cmpl$0

c++ - 为什么 libc++ 的 vector<bool>::const_reference 不是 bool?

第23.3.7节类vector[vector.bool],第1段指出:templateclassvector{public://types:typedefboolconst_reference;...但是这个程序在使用libc++时编译失败:#include#includeintmain(){static_assert(std::is_same::const_reference,bool>{},"?");}此外,我注意到C++标准在本规范中一直保持一致,直至C++98。我进一步指出,自libc++首次引入以来,libc++一直没有遵循此规范。这种不符合项的动机是什么?

c++ - sizeof(bool) 是否在 C++ 语言标准中定义?

我在标准文档中找不到答案。C++语言标准是否要求sizeof(bool)始终为1(对于1个字节),还是这个大小是实现定义的? 最佳答案 sizeof(bool)是实现定义的,标准特别强调了这一事实。§5.3.3/1,删节:sizeof(char),sizeof(signedchar)andsizeof(unsignedchar)are1;theresultofsizeofappliedtoanyotherfundamentaltypeisimplementation-defined.[Note:inparticular,sizeof

c++ - 我可以为任何 C++ 编译器假设 (bool)true == (int)1 吗?

我可以为任何C++编译器假设(bool)true==(int)1吗? 最佳答案 是的。类型转换是多余的。在你的表达中:true==1积分提升适用,bool值将提升为int,此提升必须产生1。引用:4.7[conv.integral]/4:如果源类型为bool...true转为一。 关于c++-我可以为任何C++编译器假设(bool)true==(int)1吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

c++ - 为什么 c++ 没有 &&= 或 ||= 用于 bool 值?

有没有"verybadthing"可能发生的情况&&=和||=被用作boolfoo=foo&&bar和boolfoo=foo的语法糖||条码? 最佳答案 一个bool只能是true或false在C++中。因此,使用&=和|=相对安全(尽管我不是特别喜欢这个符号)。诚然,它们将执行位操作而不是逻辑操作(因此它们不会短路),但这些位操作遵循定义明确的映射,这实际上等同于逻辑操作,只要因为两个操作数的类型都是bool.1与其他人在这里所说的相反,bool在C++中不能有不同的值,例如2.将该值分配给bool时,将转换为true按照标准。将

c++ - bool 到 int 的转换

这种转换的可移植性如何。我可以确定两个断言都通过了吗?intx=45;assert(x==0);不要问为什么。我知道这很丑。谢谢。 最佳答案 intx=4完全便携。符合标准。bool至int转换是隐式的!C++11或14标准的第4.7/4节,C++17标准的第7.8/4节,20标准的第7.3.9/2节说(IntegralConversion)Ifthesourcetypeisbool,thevaluefalseisconvertedtozeroandthevaluetrueisconvertedtoone.至于C,据我所知没有boo

c++ - 为什么 C++ 编译器不将此条件 bool 赋值优化为无条件赋值?

考虑以下函数:voidfunc(bool&flag){if(!flag)flag=true;}在我看来,如果flag具有有效的bool值,这相当于无条件将其设置为true,如下所示:voidfunc(bool&flag){flag=true;}然而gcc和clang都没有以这种方式对其进行优化——两者都在-O3优化级别生成以下内容:_Z4funcRb:.LFB0:.cfi_startproccmpBYTEPTR[rdi],0jne.L1movBYTEPTR[rdi],1.L1:repret我的问题是:是否只是代码太特殊而无法优化,或者考虑到flag不是引用,是否有充分的理由不希望进行这

c++ - 如何改进逻辑以检查 4 个 bool 值是否匹配某些情况

我有四个bool值:boolbValue1;boolbValue2;boolbValue3;boolbValue4;可接受的值为:Scenario1|Scenario2|Scenario3bValue1:true|true|truebValue2:true|true|falsebValue3:true|true|falsebValue4:true|false|false因此,例如,这种情况是NotAcceptable:bValue1:falsebValue2:truebValue3:truebValue4:true目前我想出了这个if语句来检测不良场景:if(((bValue4&&(!

iphone - 如何将 NSNumber 转换和比较为 BOOL?

首先我将BOOL值转换为NSNumber,以便将其放入NSUserDefaults。稍后我想从NSUserDefaults中检索BOOL值,但显然我得到的是NSNumber而不是BOOL。我的问题是?如何将NSNumber转换回BOOL?如何将NSNumber与BOOL值进行比较。目前我有:if(someNSNumberValue==[NSNumbernumberWithBool:NO]){dosomething}有更好的比较方法吗?谢谢! 最佳答案 您当前比较两个指针。使用NSNumber的方法来实际比较两者:if([someNS

插入 BOOL 的 Objective-C 字典

好吧,我有点困惑。这可能只是一件小事。我有一个看起来像这样的函数:-(void)getNumbersForNews:(BOOL)newsandMails:(BOOL)mails{NSMutableDictionary*parameters=[[NSMutableDictionaryalloc]init];[parameterssetValue:newsforKey:@"getNews"];[parameterssetValue:mailsforKey:@"getMails"];...}无论我使用setValue:forKey:还是setObject:ForKey:都没有关系,我总是收到