草庐IT

atomic_bool

全部标签

c++ - 你能用重载的 bool() 计算对 boolean 的构造函数调用吗?

如果bool()运算符重载,构造函数调用是否可以评估为bool值?classA{public:A(){};operatorbool()const{returntrue;}}main(){if(Aa=A()){//dostuff}}上面的代码是否有效,或者我是否需要像这样实现main:intmain(intargc,constchar*argv[]){Aa();if(a){//dostuff}}这段代码将在我的代码库中到处都是,因此减少行数、提高易读性和缩小范围很重要,并且会因此得到改进。有什么想法吗? 最佳答案 该代码包含一些句法和

c++ - 如何直接在 bool 上下文中评估对象?

我想在bool上下文中评估某个类的实例。或者更清楚地说,我想定义对象在bool上下文中直接使用时的react。这里有一个例子:classFoo{intstate;Foo():state(1){}boolcheckState(){return(state>=0);}voiddoWork(){/*blahwithstate*/}};intmain(){Fooobj;//while(obj.checkState())//thisworksperfectly,andthatswhatiindenttodo!while(obj)//thisiswhatwanttowriteobj.doWork(

c++ - operator bool() 转换为 std::string 并与 operator std::string() 冲突

在类中声明operatorstd::string时,operatorbool()怎么会导致错误,而且它本身还充当到string的隐式转换?#include#includeusingnamespacestd;classTest{public:operatorstd::string(){cout 最佳答案 您面临的问题(除了operatorstd::string()返回bool之外)是隐式转换在您需要和不需要时触发。当编译器看到s=t时,它会识别以下潜在的std::operator=匹配项://usingstd::stringforco

c++ - std::atomic_store 和 std::atomic_exchange 不交换

根据en.cppreference.com,std::atomic_exchange和std::atomic_store等价于线程安全的std::swap。但这不是我使用g++或clang++得到的行为。Problemliveoncoliru.(见下文)它虽然打印了这个:std::atomic_storea:0x1ed2c300b:0x1ed2c501a:0x1ed2c501b:0x1ed2c501std::atomic_exchangea:0x1ed2c500b:0x1ed2c301a:0x1ed2c301b:0x1ed2c301这是为什么?难道我做错了什么?我是否误读了文档?代码l

c++ - C++ 中将内置类型 (int) 转换为 bool 的首选方法是什么?

用VisualC++编程时,我想每个开发者都习惯于看到警告warningC4800:'BOOL':forcingvaluetobool'true'or'false'不时。原因显然是BOOL被定义为int并且直接将任何内置数值类型分配给bool被认为是一个坏主意。所以我现在的问题是,给定任何要解释为boolean值的内置数字类型(int、short、...),将这个值实际存储到变量中的/您的首选方式是什么类型bool?注意:虽然混合使用BOOL和bool可能不是一个好主意,但我认为无论是在Windows还是其他地方,这个问题都不可避免地会出现,所以我认为这个问题既不是Visual-C++

c++ - vector<bool> 是否违反容器要求?

C++标准草案n3242在23.2中,在包含容器要求的表中,指出X::reference用于包含T的容器必须是lvalueT.然而,对于vector,vector::reference是另一个类,用于访问存储在vector中的各个字节位的代理。这是否意味着std::vectorT=bool的类模板规范,在标准中定义,无法满足容器要求? 最佳答案 Doesthatmeanthatstd::vectorclasstemplatespecificationforT=bool,definedinstandard,failstofulfill

c++ - 检查数组中的所有 bool 值是否为真?

假设我有这个bool数组:boolsomething[4]={false,false,false,false};现在,有什么简单的方法可以同时检查这个数组中的所有值是否为真/假?而不是像这样:if(something[0]==false&&something[1]==false..)dothis(); 最佳答案 使用std::all_of#include...if(std::all_of(std::begin(something),std::end(something),[](booli){returni;//orreturn!i;

c++ - 什么是 24 小时分分钟 bool 记录的好数据结构

我的任务是创建一个数据结构,为过去24小时的每一分钟保存一个bool值。(事件X发生了吗?)我需要始终保留最后24小时。(也就是说,数据会不断添加,旧数据会弹出。)数据将持久保存到闪存驱动器中。我们在一个嵌入式平台上,但内存并没有那么有限(我有128MB可用),不过碎片化可能会成为一个问题。这是一个实时系统,但由于记录是按分钟计算的,因此几乎没有运行时限制。界面看起来像这样:classx_record{public://recordwhetherornotxoccurredthisminutevoidrecord_entry(boolx_occured);//howmanyminute

c++ - C++中的bool是什么?

我遇到了一些非常有趣的代码,这让我想知道bool是什么。我一直认为它是原始类型,例如int或char或long。但是今天,我看到了这样的东西:voidboolPtrTest(){boolthisBool=true;boolPtrHere(thisBool);printf("thisBoolis%s\n",thisBool?"true":"false");}voidboolPtrHere(bool&theBool){theBool=false;//uhh,dereferencinganyone?}这段代码运行-没有错误-并打印“thisBoolisfalse”!为了让这更奇怪,我运行了以

c++ - std::atomic 将一对原子 int32 视为一个原子 int64?

我有一对unsignedint32std::atomic_start;std::atomic_end;有时我想通过比较交换来设置开始或结束,所以我不希望在整个64位对上使用CAS可能导致虚假故障。我只想使用32位CAS。_end.compare_exchange_strong(old_end,new_end);现在我可以将开始和结束作为一个64位原子读取来获取。或者两个单独的32位读取。执行一次64位原子提取(编译器添加适当的内存栅栏)而不是使用两个内存栅栏进行两次单独的32原子位读取(或者编译器会优化它吗?)会不会更快?如果是这样,我将如何在C++11中做到这一点?