草庐IT

bool2str

全部标签

c++ - bool 位字段与逻辑位掩码或位移 - C++

我有一系列需要很多bool字段的类,大约在4-10个之间。我不想为每个bool值使用一个字节。我一直在研究位域结构,例如:structBooleanBitFields{boolb1:1;boolb2:1;boolb3:1;boolb4:1;boolb5:1;boolb6:1;};但在做了一些研究后,我看到很多人说这会导致内存访问效率低下,不值得节省内存。我想知道这种情况的最佳方法是什么。我应该使用位字段,还是使用带位掩码的字符(and'sandors)存储8位?如果第二种解决方案是移位更好还是使用逻辑更好?如果有人可以评论他们会使用什么方法以及为什么它真的能帮助我决定我应该走哪条路。提

c++ - "if (var)"使用数字转换而不是 bool 值

为什么if(var)...使用数字转换而不是bool值?我有一个实现两者的类:operatorint(){....}operatorbool(){....}但是如果我使用:if(my_class_var)....;然后使用int转换而不是boolean?!!?!编辑:正如versedmarald所说,这是正确的。我发现了不同之处。我实际上使用的是:operatorint(){....}operatorbool()const{...}还是被迷住了,为什么不一样?gcc版本4.6.2 最佳答案 如果你说的是真的,我认为你的编译器违反了标

c++ - vector<bool> 可以由 int 初始化吗

我想枚举[0,31]的bool表示并将其存储在tries中供以后使用。staticconstintN=5;vectortries(N);for(inti=0;iinitializedbyint?//soIdon'thavetodobitoperationfor(intt=0;t 最佳答案 std::vector不能这样做,但是std::bitset能够。由于vector的大小在您的情况下是恒定的,因此您应该使用std::bitset.只需使用您想要的非负整数值对其进行初始化即可。请注意bitset不提供(或模仿)Container接

c++ - 检查 bool vector (范围)是否等于 1 和 0 的序列

我之前拥有的是一串1和0,我可以简单地检查某个范围是否等于我想要的序列:if(myString.substr(0,4)=="1110")...出于内存原因,我将这个字符串变成了vector,因为vector中的一个bool只占用1位而不是1字节。现在,这里有一个问题。我想做与substr相同的比较.可能没有类似的东西:if(myVector[0]==true&&myVector[1]==true&&...)或vectortmpVector;tmpVector.push_back(true);tmpVector.push_back(true);...if(myVector==tmpVec

c++ - 用位域打包 bools (C++)

我正在尝试使用C++与Ada代码进行交互,因此我正在使用位字段定义一个结构,以便所有数据在两种语言中都位于同一位置。以下内容不完全是我在做什么,但概述了问题。以下也是VS2008中的控制台应用程序,但这不是特别相关。usingnamespaceSystem;intmain(){intarray1[2]={0,0};int*array2=newint[2]();array2[0]=0;array2[1]=0;#pragmapack(1)structtestStruct{//Word0(desired)unsigneda:8;unsignedb:1;boolc:1;unsignedd:21

c++ - << s.str() 和 << s.rdbuf() 之间的区别

谁能解释一下细微差别:ofstreamf("test.txt")std::stringstreams;s我主要使用.rdbuf()将字符串流推送到文件(因为它更有效),但是如果字符串流为空,那么文件流就会变坏......?这不傻吗?我觉得我不太明白... 最佳答案 如果无法从流缓冲区中提取任何字符,则“插入”流缓冲区的插入运算符会设置故障位-[ostream.inserters]/9:Ifthefunctioninsertsnocharacters,itcallssetstate(failbit)(whichmaythrowios_

C++ 从 bool 到字符串的隐式转换

我有以下代码,在VisualC++2012中编译。#includevoidfunc(std::stringstr){}voidmy_func(){func(false);}bool值“false”被隐式传递给字符串构造函数string(constchar*_Ptr)然后指针为空(因为false=0)。为什么会编译,是否应该按照C++11标准编译? 最佳答案 MSVC错误地将false视为空指针常量。然而,根据N4140,§4.10[conv.ptr]/1(强调我的):Anullpointerconstantisanintegerli

c++ - "warning C4800: ' int' : forcing value to bool 'true' or 'false' "不同场景下的不同行为

我无法理解此警告的以下行为。case1:boolread=(33&3);//NoWarningissuedbyvs2013case2:intb=33;boolread=(b&3);//NowcompilerisgeneratingC4800warning.为什么编译器在情况2中生成警告,而在情况1中不发出任何警告。 最佳答案 C4800是一个性能警告-在运行时将整数强制转换为bool会产生成本。这与逻辑正确性无关。最常见的强制转换(和警告)发生在您与使用整数(VC++中的BOOL)作为bool值的代码交互时。第一个代码段中的编译时强

c++ - 如何在 C++ 中创建一个连续的 bool vector ?

如何制作bool的连续vectorC++中的数量?我读了很多关于使用std::vector的警告我想将面具存储到std::vector.为了使我的目的更明确一点,我想对我的std::vector应用统计信息对于bool中的那些元素为真的vector。为了以最佳性能做到这一点,我希望vector是连续的。 最佳答案 您需要知道人们认为std::vector存在哪些具体问题,因为它们不一定适用于您的情况。其中最重要的可能是它不一定是连续的。这里contigous可能用词不当。为整个vector分配的内存可能仍处于连续block中,但是,

c++ - std::list<bool> 的实现

是否std::list具有类似的疯狂,像std::vector这样的明确特化?是std::vector唯一受此影响的C++标准库容器?是否有某种traits我可以用来检测特化吗? 最佳答案 如标准所示,std::vector有它自己的段落来规定它的实现。std::list的要求有一个不存在,但这并不意味着不允许实现不但是有一个。据我所知,std::vector是唯一需要具有bool特化的容器. 关于c++-std::list的实现,我们在StackOverflow上找到一个类似的问题: