草庐IT

c++ - bool类型的变量是如何存储在内存中的? (C++)

boolean测试;sizeof(test)=1如果使用VS2010。由于每个C++数据类型都必须是可寻址的,“测试”boolean变量是8位(1字节)。我的问题是“test”变量真的占用内存中的1个字节吗?有没有什么实现技巧可以让bool数据类型只占一点?如果是,你能举个例子吗?booltest1[32](在VS2010中),inttest2(在VS2010中)test1和test2是否占用相同的内存? 最佳答案 test1的每个元素必须是可寻址的。这意味着数组test1(使用booltest1[32]创建的)至少需要32个字节(

c++ - make 失败,返回错误 "cannot convert ‘std::istream {aka std::basic_istream<char>}’ 到 ‘bool’”

我正在尝试从源代码编译libgtextutils(fastxtoolkit需要)。“./configure”命令运行良好,但随后的“make”命令产生了一个我无法解决的错误。text_line_reader.cpp:Inmemberfunction‘boolTextLineReader::next_line()’:text_line_reader.cpp:47:9:error:cannotconvert‘std::istream{akastd::basic_istream}’to‘bool’inreturnreturninput_stream;^~~~~~~~~~~~make[3]:*

c++ - 为什么我不能对 std::ofstream 使用 operator bool()

为什么我不能写下面的代码?#include#includebooltouch(conststd::string&file_path){returnstd::ofstream(file_path,std::ios_base::app);}intmain(){touch("foo.txt");}输出prog.cpp:Infunction'booltouch(conststring&)':prog.cpp:6:52:error:cannotconvert'std::ofstream{akastd::basic_ofstream}'to'bool'inreturnreturnstd::ofst

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&