草庐IT

atomic_long_try_cmpxchg_acquire

全部标签

c++ - 没有从 long unsigned int 到 long unsigned int& 的转换

当我尝试编译以下内容时,收到错误消息Noknownconversionforargument2fromlongunsignedinttolongunsignedint&代码:voidbuild(int*&array,unsignedlong&index){if(index==0)return;else{heapify(array,index);build(array,index-1);}}谁能解释为什么会这样,这个错误背后的逻辑是什么? 最佳答案 build的第二个参数需要引用(用&标记)。引用有点像指针,因此您只能使用具有内存地址

c++ - 关于 RAII,C++ `try`/`catch` block 是否与其他 block 相同?

好吧,如果我使用RAII习惯用法来管理某些上下文属性*,如果我在tryblock的开头直接使用它,它会像我预期的那样工作吗?换句话说,如果我有这个:structraii{raii(){std::cout……我成功地使用了它:{raiido_the_raii_thing;stuff_expecting_raii_context();/*…*/}...如果我这样做,RAII实例会以同样的方式工作吗:try{raiido_the_raii_thing;stuff_expecting_raii_context_that_might_throw();/*…*/}catch(std::except

c++ - 从魔数(Magic Number)到 int 或 long 的重载解析(在 range-v3 中)

在range-v3中,view_facade类有begin()函数。template())>detail::facade_iterator_tbegin(){return{range_access::begin_cursor(derived(),42)};}range_access::begin_cursor()是这样实现的,templatestaticRANGES_CXX14_CONSTEXPRautobegin_cursor(Rng&rng,long)//--1RANGES_DECLTYPE_AUTO_RETURN(rng.begin_cursor())templatestatic

c++ - atomic<T*> 总是无锁的吗?

在我的MAC操作系统上,atomic是无锁的。#include#includeintmain(){std::cout().is_lock_free()我想知道是否atomic总是无锁?有引用介绍吗? 最佳答案 Thestandardallowsimplementinganyatomictype(withexceptionofstd::atomic_flag)tobeimplementedwithlocks.即使平台允许某些类型的无锁原子,标准库开发人员也可能没有实现它。如果您需要在使用锁时实现不同的东西,可以在编译时使用ATOMIC

c++ - 用于将后缀附加到 unsigned long long 文字的宏

我正在使用一个定义如下常量的库:#defineSOME_BIG_CONSTANT0x0000000100000000这个字面量太大,无法用long表示,所以任何使用这个宏的程序都无法编译(使用gcc4.1.2forVxWorks)。有效的(非标准,但受此编译器支持)解决方案是将后缀ull添加到文字中:#defineSOME_BIG_CONSTANT0x0000000100000000ull但是,这需要我修改库header,我宁愿不这样做。我讨厌宏,所以我的问题是,我如何定义一个可以添加该后缀的宏,我可以这样调用:ULL_(SOME_BIG_CONSTANT)这将扩展为:0x000000

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

如果我有两个unsignedlonglong值,比如pow(10,18)和pow(10,19),我将它们相乘并将输出存储在另一个unsignedlonglong类型的变量中……我们得到的值是显然不是答案,但它有任何逻辑吗?每次我们尝试使用任意大的数字时,我们都会得到一个垃圾类型的值,但是输出与输入值有任何逻辑吗? 最佳答案 C++中的无符号整数类型遵循模运算规则,即它们表示对2N取模的整数,其中N是数字整数类型的值位(可能小于其sizeof倍CHAR_BIT);具体来说,该类型包含值[0,2N)。因此,当您将两个数字相乘时,结果是数

c++ - 使用已删除函数 - std::atomic

这是我在.h文件中的声明:staticstd::atomicOrdersExecutorIdCounter;这是来自.cpp文件的初始化:std::atomicActionBasedOrdersExecutor::OrdersExecutorIdCounter=0;它在VC++中编译得很好,但在gcc4.8中我得到这个错误:error:useofdeletedfunction‘std::atomic::atomic(conststd::atomic&)’我该如何解决这个问题? 最佳答案 可以直接初始化原子变量,不需要deleted拷

c++ - 对 std::atomic::load 的结果使用 Structure dereference(->) 运算符是否安全

在尝试使用std原子指针时,我遇到了以下问题。假设我这样做:std::atomicmyString;////AcanIdothis?myString.load()->size()//BcanIdothis?charmyFifthChar=*(myString.load()->c_str()+5);//CcanIdothis?charmyCharArray[255];strcpy(myCharArray,myString.load()->c_str());我很确定C是非法的,因为myString可能同时被删除。但是我不确定A和B。我认为它们是非法的,因为在执行读取操作时指针可能会被引用。

c++ - 如何通过 unsigned long 将 std::shared_ptr 传递给回调?

我有一个旧的C风格库,它使用带有unsignedlong作为用户参数的回调,我想将我的shared_ptr传递给回调,以便增加引用计数。voidcallback(unsignedlongarg){std::shared_ptrptr=???arg???}voidstarter_function(){std::shared_ptrptr=std::make_shared();unsignedlongarg=???ptr???//passtolibrarysoitmaybeusedbycallback}目前我在shared_ptr上使用get(),然后使用C风格的强制转换,但这会在star

c++ - 关于long long和long double

它们什么时候成为标准C++的一部分?我认为longlong是C++0x的特性,对吗?longdouble怎么样?它已经在C++98或C++03中了吗? 最佳答案 longdouble和longlong已经存在了很长一段时间,并分别在C89和C99中标准化。C++从其第一个版本C++98标准化了longdouble,并将在即将到来的标准修订中添加longlong。 关于c++-关于longlong和longdouble,我们在StackOverflow上找到一个类似的问题: