草庐IT

c++ - 双 bool 否定运算符

这个问题在这里已经有了答案:DoubleNegationinC++(14个答案)doublenegationinC:isitguaranteedtoreturn0/1?(2个答案)关闭4年前。我从MicrosoftimplementationofGSL中看到这段代码(C++指南支持库):#ifdefined(__clang__)||defined(__GNUC__)#defineGSL_LIKELY(x)__builtin_expect(!!(x),1)#defineGSL_UNLIKELY(x)__builtin_expect(!!(x),0)#else#defineGSL_LIKE

c++ - Bools 的填充结构的大小

如果1个bool是1byte[8位]那么4个bool的压缩结构是32位还是4位?pack指令删除了对齐要求,但它会使bool集合更有效[内存方面]吗? 最佳答案 是的。即使是bool值的压缩结构,每个bool值也至少使用8位。除非你使用bitfields. 关于c++-Bools的填充结构的大小,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4035729/

c++ - 当使用 bool 值构造字符串对象时,发生了什么类型转换?

在我的代码中,有一个拼写错误:在初始化std::string对象时,我没有使用"false",而是输入了false(这是一个bool)。现在这并没有报告任何编译错误。但稍后在我的代码中,当使用这个字符串对象时,我在运行时得到std::logic_error。谁能解释一下,为什么在这种情况下允许构造(否则我会收到编译错误并在那里发现问题)?这是一个小片段-#includeintmain(){std::stringstr=false;std::cout我在运行时得到的o/p-xhdrdevl8@~/MYBACKUP=>g++-otest_string-gtest_string.cxxxhd

c++ - bool 数组的最小尺寸实现

我需要一个bool数组的最小尺寸实现。数组的大小在编译时已知。我检查了std::bitset和boost::array,但它们都会产生对小数组来说很重要的开销。例如,如果数组大小为8,则容器应仅使用1字节内存(假设是普通CPU架构)。这是否存在,还是我需要自己推出? 最佳答案 您可以自己制作,但不能从头开始。bitset实现应该有几行看起来像typedefunsignedlong_WordT;(SGI)或typedef_Uint32t_Ty;(MSVS)。您可以小心地替换类型和命名空间,并以此方式制作您自己的容器。我将类型更改为ch

c++ - Boost 程序选项 bool 总是 True

通过程序选项,我正在检查参数的有效组合。但出于某种原因,gpu参数是一个bool,无论我是否在命令行上将其设置为false,它始终为true。如果我在命令行上指定了gpu选项,有没有办法让它为false?我希望能够创建一个bool变量来表示是否使用了命令行上的选项。我也找不到任何关于variables_map的count()的文档。它是std::map函数吗?部分代码:namespacepo=boost::program_options;po::options_descriptiondesc("AllowedOptions");desc.add_options()("help,h","

c++ - C++中的二维 bool 数组初始化

我不太使用C,最近我对二维数组初始化问题感到困惑。我需要调试某人的代码并卡在以下(她的原始代码)中:constintlocation_num=10000;bool**location_matrix;if(node_locations){location_matrix=(bool**)malloc(location_num*sizeof(bool*));if(!location_matrix){cout我认为这是多余的,所以我将其更改为以下内容:location_matrix[location_num][location_num]={{false}};但是,段错误会在运行时发生。我的问题

c++ - 如何检查 vector<bool> 实际上是位 vector 而不是字节 vector ?

我需要存储一个动态的位数组。TheC++referencepageonvector具有以下信息:Thestorageisnotnecessarilyanarrayofboolvalues,butthelibraryimplementationmayoptimizestoragesothateachvalueisstoredinasinglebit.如何确保我的程序使用vector实际上在vector中存储位而不是boolean值(字节)吗? 最佳答案 不要尝试那样做。相反,使用boost::dynamic_bitset这清楚地表明你

c++ - 将 ifstream 转换为 bool 和使用 ifstream::is_open() 之间的区别

也许是个伪问题,但我需要一个明确的答案。这些函数的返回有什么不同吗intFileExists(conststd::string&filename){ifstreamfile(filename.c_str());return!!file;}intFileExists(conststd::string&filename){ifstreamfile(filename.c_str());returnfile.is_open();}所以换句话说,我的问题是:将fstream转换为bool会给出与fstream::is_open()完全相同的结果吗>? 最佳答案

c++ - libstdc++ 的 std::vector<bool>::data 有什么作用?

根据标准,std::vector没有成员函数data().但是,以下代码片段可以使用带有libstdc++的最新GCC正常编译:#includeintmain(){std::vectorv;v.data();}如果我们尝试使用结果,结果返回类型是void.这是一些gcc扩展还是一个错误?如果前者为真,它有什么作用? 最佳答案 我的/usr/include/c++/4.8/bits/stl_bvector.h有://_GLIBCXX_RESOLVE_LIB_DEFECTS//DR464.Suggestionfornewmemberfu

c++ - 我需要 std::atomic<bool> 还是 POD bool 足够好?

考虑这段代码://globalstd::atomicrun=true;//thread1while(run){/*dostuff*/}//thread2/*dostuffuntilit'stimetoshutdown*/run=false;我在这里需要与原子变量相关的开销吗?我的直觉是,bool变量的读/写或多或少是原子的(这是一个常见的g++/Linux/Intel设置),如果有一些写/读时序异常,我在线程1上的运行循环会停止一个结果是早晚通过,对于这个应用程序我不是很担心。还是我在这里遗漏了一些其他考虑因素?查看perf,我的代码似乎在std::atomic_bool::opera