草庐IT

c++ - 有没有办法避免无意中将非 bool 参数传递给 bool 参数?

我今天遇到了一个C++类型安全问题,我想知道是否有一种好方法可以让编译器在编译时检测到这个问题。考虑这个示例代码:classBar{public:voidFoo(boolarg1=false,intarg2=10,intarg3=20){[...]}};intmain(intargc,char**argv){intx=40,y=50;Barb;b.Foo();//correctusageb.Foo(true,x,y);//correctusageb.Foo(x,y);//problem:compilesbutwon'tdowhatthecallerexpects}如对b.Foo()的最

c++ - 在访问 vector<bool> 中的元素地址时获取临时地址

我仅在访问boolvector中的元素地址时收到警告。对于int等其他数据类型的vector,我不会收到任何警告。例如vectorboolVect;boolVect.push_back(false);if(boolVect.size()>0){cout我在声明“cout有人可以澄清一下吗? 最佳答案 std::vector坏了(参见例如http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98或Alternativetovector)。它是std::vector

c++ - 通过 bool 进行的 char 往返转换会发生什么情况?

关于将char转换为bool然后再次转换回char,C++语言定义promise什么?charoriginal=255;boolnext=original;charfinal=next;此外,在这种情况下,除了语言保证的内容之外,大多数编译器会做什么? 最佳答案 这将给出零值或一值,具体取决于原始值是零还是非零。转换为bool给出true或false的值:4.12Azerovalue,nullpointervalue,ornullmemberpointervalueisconvertedtofalse;anyothervalueis

c++ - vector<bool>::operator[] 行为不当?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Whyvector::referencedoesn’treturnreferencetobool?我曾经认为std::vector::operator[]我们得到了被访问项目的深度拷贝,但似乎并不总是如此。至少,用vector下面的测试代码给出了不同的结果:#include#includeusingnamespacestd;templatevoidTest(constT&oldValue,constT&newValue,constchar*message){coutv;v.push_back(oldValue)

c++ - C/C++ 中的 bool 是什么?关键字还是宏?

我提到了thisquestion,其中一些答案表明bool是整型(IDE也将其视为关键字)。但是,没有一个答案暗示cplusplus中提供的信息,这表示bool是通过添加的宏(在这种情况下,编译器可能会在编译时隐式添加此header以允许bool)。这是的g++版本.那么bool到底是什么?是?整型关键字还是宏? 最佳答案 在C中,bool是一个宏。C中没有名为bool的内置类型或关键字,因此典型的实现使用标准库来#definetrue和false分别为1和0。if语句的规则是根据“零”和“非零”表达式定义的,因此依赖于true和假

c++ - std::vector<bool> 优化实现

在documentation,我可以看到std::vector通过使每个boolean值占用一个位来优化空间效率。来自文档:Themannerinwhichstd::vectorismadespaceefficient(aswellaswhetheritisoptimizedatall)isimplementationdefined.这是否意味着它取决于编译器的实现?如果支持,我在哪里可以检查我的编译器是否支持它?他们为什么不希望它得到支持?这似乎是一个非常简单有效的实现。如果不是,这意味着什么?如果我希望进行此优化,它意味着什么?我正在使用TDMGCC工具集。

c++ - 从 nullptr_t 到 bool : valid or not? 的转换

我用3个编译器测试了以下代码,得到了3个不同的结果:错误、警告和正常。GCC(5.3):错误:从“std::nullptr_t”到“constThing&”的无效用户定义转换Clang(3.8):警告:将nullptr常量隐式转换为“bool”MSVC(14.1):没有错误,没有警告哪个编译器是正确的?我知道这是指针类型和bool之间的简单转换。但是std::nullptr_t和bool是怎么回事?(最后,Clang和MSVC都可以处理代码。从积极的角度来看,Clang稍微有点冗长。)structThing{Thing(bool){}};voidaddThing(constThing&

c++ - isSet() 或 operator void*() 或 explicit operator bool() 或其他?

关于检查值是否已设置的函数的最新技术水平是什么?例如,下面的迭代器解析单元格。一些单元格包含一个值,其他单元格为空。哪种方式最方便?structiterator{//usage:boolisset()const//if(it.isset())boolisSet()const//if(it.isSet())boolempty()const//if(it.empty())boolis_set()const//if(it.is_set())boolis_valid()const//if(it.is_valid())operatorvoid*()const;//if(it)explicitop

c++ - 按位与函数在 C++ 中返回 bool

我写了一个程序,列出一组东西中的错误,最后返回一个boolean值(返回true表示没有发现错误)。这里是我的代码的总结:boolcheckStuff1(){/*...*/}boolcheckStuff2(){/*...*/}//...boolcheckStuffN(){/*...*/}boolcheckAllStuff(){boolresult=true;result&=checkStuff1();result&=checkStuff2();//...result&=checkStuffN();returnresult;}我相信result的值最终会是正确的。但是,我想确保所有函数c

c++ - 在这种情况下重载 bool 运算符是否危险

我在SoF上看到评论或回答指出将转换运算符重载为bool是危险的,我应该更喜欢void*运算符。我仍然想问一下在我的用例中使用这个运算符是否是危险的做法,如果是,为什么。我实现了一个简单的几何库,其中一个最基本的类是我按以下方式定义的一个点:structpoint{doublex,y;boolreal;point(doublex_,doubley_):x(x_),y(y_),real(true){}point():x(0),y(0),real(true){}operatorbool(){returnreal;}};我将尝试解释为什么我需要转换运算符来boolean。我有另一个名为lin