草庐IT

c++ - istream (ostream) 与 bool

这是一个读取尽可能多的单词的C++代码尽可能从给定的文本文件开始,直到遇到EOF。stringtext;fstreaminputStream;inputStream.open("filename.txt");while(inputStream>>text)cout我的问题是:将while循环的条件(即inputStream>>text)转换为bool值(即true或false)到底执行了什么过程?我自己对这个问题的回答是:据我了解,inputStream>>text应该返回另一个(文件)输入流。当EOF到达时,流似乎为NULL。NULL可以定义为0,相当于false。我的回答有道理吗?

c++ - 未定义 vector<bool> 元素的运算符 &=?

这个问题在这里已经有了答案:Whyvector::referencedoesn'treturnreferencetobool?(6个答案)关闭9年前。我用operator&=做了一些测试.如以下示例所示,这适用于单个bool类型以及vector输入,但不是vector.#includeintmain(){boola,b;a&=b;//okstd::vectorc(1);c[0]&=b;//errorc[0]=c[0]&b;//okstd::vectord(1);d[0]&=b;//okreturn0;}谁能告诉我这是怎么回事?(我使用的是gcc4.4.3)

c++ - 将非成员转换重载到 bool 运算符

我正在尝试为std::bitset编写bool转换运算符我试过:templateoperatorbool(std::bitset&b){returnb.any();}但是我得到了errorC2801:'mynamespace::operatorbool'mustbeanon-staticmember来self的VisualStudio。但是当我查找C2801explanation它对转换运算符只字未提(仅涉及=、->、[]、())那么,是否有可能以某种方式编写“Conversionstd::bitsettobooloperator?”(我不能在我的if语句中调用b.any(),因为当s

c++ - 我可以依赖一个新的 bool 被初始化为 false 吗?

在C++中,我能否依赖于在所有情况下都初始化为false的新boolean值?bool*myBool=newbool();assert(false==*myBool);//AlwaysthecaseinaproperC++implementation?(更新代码以反射(reflect)评论。) 最佳答案 在这种情况下,是的;但原因很微妙。newbool()中的括号导致值初始化,将其初始化为false。没有它们,newbool将改为执行默认初始化,这会留下一个未指定的值。就个人而言,如果可能的话,我宁愿看到newbool(false)

c++ - 来自 std :unique_ptr to bool 的隐式转换错误

我正在使用Allegro创建一个简单的游戏。当我尝试验证指向显示器的指针不为空时,我收到编译器错误提示errorC2664:'voidvalidate(bool,std::string)':cannotconvertargument1from'std::unique_ptr>'to'bool'这是我的代码#include#include#include#includeusingnamespacestd;constintWIDTH=512;constintHEIGHT=512;voidvalidate(boolptr,stringerrorMessage){if(!ptr){cerrdi

c++ - 流到 bool 的隐式转换

拿这个玩具代码:#include#includeintmain(){std::ifstreamis;//performread//...if(!is)//worksstd::cout你会得到以下反直觉的结果:if(!is)编译,if(is==false)给出errorC2678:binary'==':nooperatorfoundwhichtakesaleft-handoperandoftype'std::ifstream'(orthereisnoacceptableconversion)(对于VS2015-gcc和clang中的类似错误)。标准说(根据thisanswer):Vali

c++ - 等待 atomic_bool

我有两个线程和一个由第二个线程设置的标志。我可以使用atomic_bool,但我希望能够等待*在第一个线程上设置标志。我该怎么做?我猜我不能使用condition_variable,因为如果第二个线程在第一个线程开始等待之前调用notify_one,线程将不会唤醒。此外,检查标志是否已经设置应该相当快。我想这应该很简单,但我只是卡住了,所以我在这里问。提前致谢。*编辑:当然是阻塞,而不是忙等待。抱歉,如果不清楚。 最佳答案 在cbreak和Ravadre(注释)的帮助下,我从这里得到:intmain(){std::mutexm;st

c++ - 初始化 bool 的内联 vector

我正在使用这个例子来初始化boolvector:#include#include#includeusingnamespacestd;intmain(){map>myMap;vectorone{true,true,false};myMap[2]=one;cout我在此代码中所做的唯一更改是使用std::vector而不是vector,我现在拥有:std::map>m_links;std::vectorm_allFalse{false,false,false,false,false};它告诉我在m_allFalse之后使用;。我怎样才能摆脱这个错误?我使用的是intel编译器14,但没有c

C++ 在条件中依赖隐式转换为 bool?

我在codingstandardssheet中发现了以下规则:Donotrelyonimplicitconversiontoboolinconditions.if(ptr)//wrongif(ptr!=NULL)//ok这条规则有多合理/有用?编译后的代码有多少重载? 最佳答案 从最严格的意义上讲,您可以依赖到bool的隐式转换。与C的向后兼容性要求它。于是就变成了代码可读性的问题。通常,代码标准的目的是强制代码风格保持一致,无论您是否同意这种风格。如果您正在查看其他人的标准并想知道是否应该将其纳入您自己的标准,请继续讨论它-但如果

c++ - 使用模板元编程将模板函数 bool 参数转置为运行时函数参数

我有一个接受多个bool模板参数的函数:templatevoidfunction(intarg1,intarg2,intarg3);我想在编译时(使用任何模板魔术,如果需要使用C++11)自动生成一个函数指针表(或类似于C++元编程的有趣结构的东西)到所有组合模板参数par*的值,这样我就可以构造一个函数,将这些模板参数作为运行时参数并转发到正确的模板实例化:voidruntime_function(boolpar1,boolpar2,boolpar3,intarg1,intarg2,intarg3);我认为如果不是模板函数而是想对类做同样的事情,我认为这是可以做到的,这要归功于模板模