草庐IT

vec_bool

全部标签

C++ sizeof 与 bool

这是一个简单的问题。先写代码。structA{intx;};structB{booly;};structC{intx;booly;};在主函数中,我调用cout结果是bool:1int:4classA:4classB:1classC:8为什么C类的大小是8而不是5?请注意,这是在MINGW4.7/Windows7/32位机器上使用gcc编译的。 最佳答案 聚合的对齐方式是其最严格的成员(具有最大对齐要求的成员)的对齐方式。换句话说,结构的大小是其最严格(具有最大对齐要求)成员对齐的倍数。structD{boola;//willbep

c++ - vector<bool> 迭代器有任何保证吗?

cppreference表示vector的迭代器特化是实现定义的,许多不支持像ForwardIterator这样的特征(因此RandomAccessIterator)。cplusplus加个神秘的“最”:Thepointeranditeratortypesusedbythecontainerarenotnecessarilyneitherpointersnorconformingiterators,althoughtheyshallsimulatemostoftheirexpectedbehavior.我无法访问官方规范。vector是否保证任何迭代器行为?迭代器?更具体地说,如何编写

c++ - 绕过 vector<bool>,使用 basic_string<bool>?

这是一个安全的解决方法吗?我想使用vectorbool但需要将指针传递给需要C样式数组的旧代码。typedefstd::basic_stringvector_bool;intmain(){vector_boolab;ab.push_back(true);ab.push_back(true);ab.push_back(true);ab.push_back(false);bool*b=&ab[0];b[1]=false;}编辑:感谢您对其他解决方案的建议,但我真的很想对我的上述解决方案做出明确的回答。谢谢。 最佳答案 我不确定std::

c++ - 并发写入 vector<bool>

我知道可以同时读取std::vector没有“坏”后果,因为这个操作可以被认为是线程安全的。但是写操作就不是这样了。但是,我想知道这是否并不总是正确的,例如考虑我的特定情况。我有一个std::vector,其中所有元素都初始化为false,并且,给定一个索引数组,我需要将这些元素的值(每个索引的vector[index])从false更改为至true.如果我为每个索引使用不同的线程(并且有可能某些索引具有相同的值),这个操作是否可以被认为是线程安全的?如果vector是std::vector(或任何基本类型)并且分配的值始终相同(例如1)此操作仍可被视为线程安全的吗?

c++ - 运算符优先级(bool 之前是否为 void*?)

回答thisquestion时我做了一些让我很困惑的研究。我注意到两个成功打开的ifstreams不相等,但两个失败的ifstreams相等。起初我检查了cplusplus.com。operator!返回badbit和failbit的状态。我认为与此相反的仍然是返回这两位的状态,但是翻转了。错误,因为两次成功调用不相等。然后我认为它是某个地方的operatorbool会返回一些东西。所以我试图从ifstream回溯并找到istream::operatorbool(),它正在返回_Ok。但还是错了,这似乎根本没有被调用(也不可能,因为两次成功的调用仍然不相等)。所以我改变了方法并检查了V

c++ - 将 GLSL 转换为 C++ float/vec3?

这一行到底做了什么ra.rgb*ra.w/max(ra.r,1e-4)*(bR.r/bR);我比较困惑的地方是怎么翻译(bR.r/bR);一个float除以一个vec3?我想将其转换为C++,但返回一个float除以vector的所有元素是什么?等等(无法访问显卡以检查?) 最佳答案 这是一个组件划分的例子,它的工作原理如下:GLSL4.40Specification-5.9表达式-pp.101-102Ifthefundamentaltypesintheoperandsdonotmatch,thentheconversionsfro

c++ - boost::optional 对 bool 的隐式转换消失了吗?

我开始将vc++10/boost1.48代码库移植到vc++12/boost1.57,但我收到一个错误,提示boost::optional无法转换为bool。我以为这是boost::optional的一个特性,它被删除了吗?例子:boolfizz(){boost::optionalbuzz;returnbuzz;}给予Error21errorC2440:'return':cannotconvertfrom'boost::optional'to'bool' 最佳答案 是的。Boost1.55仍然使用SafeBoolIdiom://im

c++ - 重载、可变参数函数和 bool 类型

以下程序编译正常并按预期工作。它的输出是:12#includeclassFoo{public:voidBar(constchar*b,...){printf("1\n");};voidBar(inta,constchar*b,...){printf("2\n");};};intmain(){Foofoo1;foo1.Bar("Test","xx",1,2);foo1.Bar(1,"xx","xx",2,2);}现在,如果我将第二个Bar函数的int参数更改为bool和foo1.Bar(1,"xx","xx",2,2);到foo1.Bar(true,"xx","xx",2,2);,那么下

c++ - 使用 volatile bool 强制另一个线程等待是否安全? (C++)

我读到的关于volatile的所有内容都说它永远不安全,但我仍然倾向于尝试它,而且我还没有看到这种特定情况被宣布为不安全。我有一个单独的线程来渲染场景,从主模拟线程中提取数据。这没有同步,但工作正常。问题在于,当程序退出时,渲染器需要停止从模拟线程中提取数据,然后模拟线程才能安全地清理自身,而不会导致渲染器尝试读取无效内存。为此,我让渲染器在其线程中无限运行:volatileboolstillRendering;voidRenderThreadFunction(){stillRendering=true;while(programRunning){renderer->render();

c++ - 如何 memset 一个 bool 数组?

void*memset(void*dest,intc,size_tcount)第三个参数是数组中的字符数或字节数。你如何memset一个bool数组,比如boolbArray[11]?MSDN说:“安全说明-确保目标缓冲区有足够的空间容纳至少count个字符。” 最佳答案 std::fill()应尽可能使用memset()。std::fill(std::begin(bArray),std::end(bArray),value);如果bArray是指针,则应使用以下内容:std::fill(bArray,bArray+arraySiz