草庐IT

objc_setProperty_atomic_copy

全部标签

c++ - 如何打印 std::atomic<unsigned int> 的值?

我正在使用std::atomic在我的程序中。如何使用printf打印它的值?如果我只使用%u是行不通的.我知道我可以使用std::cout,但我的程序中到处都是printf电话,我不想更换他们中的每一个。以前我用的是unsignedint而不是std::atomic,所以我只是使用%u在我的printf中的格式字符串中调用,因此打印工作正常。尝试打印std::atomic时遇到的错误现在代替常规unsignedint是:error:format‘%u’expectsargumentoftype‘unsignedint’,butargument2hastype‘std::atomic’

c++ - std::move 和 std::copy 是否相同?

我尝试做类似的事情:std::copy(std::make_move_iterator(s1.begin()),std::make_move_iterator(s1.end()),std::make_move_iterator(s2.begin()));出现这个错误:error:usingxvalue(rvaluereference)aslvalue*__result=std::move(*__first);这让我感到困惑。如果您使用std::move,也会发生同样的事情。看起来GCC内部使用了一个名为std::__copy_move_a的函数,它move而不是复制。使用std::co

c++ - "atomic"和 "cstdatomic"有什么区别?

有人可以澄清一下包含选项之间的区别吗#include和#inlucde?我猜没有,因为它的行为相同?我问这个是因为在我的debian系统上我只有atomic而在我的kubuntu系统上我有cstdatomic。Debian上的编译器:版本4.7.2(Debian4.7.2-4)Kubuntu上的编译器:版本4.6.3(Ubuntu/Linaro4.6.3-1ubuntu5) 最佳答案 现有的两个答案都是错误的,大多数评论也是如此。不是任何标准中定义的header。它在旧的C++0x草案中定义,但不在最终的C++11标准中,仅是。因此

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

关于copy-and-swap习语有几个很好的答案,例如explainingthecopyandswapidiom和explainingmovesemantics.适用于复制和移动分配的基本习惯用法如下所示:T&T::operator=(Tother){this->swap(other);return*this;}此作业适用于复制和移Action业,因为other复制或移动构造取决于赋值的右侧是左值还是右值。现在让有状态分配器进入画面:ifT在分配器类型上进行参数化,例如std::vector,上面的成语并不总是有效!具体来说,std::allocator_traits包含三种类型,指

c++ - C++ 是否为纯虚拟类创建默认值 "Constructor/Destructor/Copy Constructor/Copy assignment operator"?

C++编译器是否为这个“类”生成默认函数,如Constructor/Destructor/Copy-Constructor...?classIMyInterface{virtualvoidMyInterfaceFunction()=0;}我的意思是不可能实例化这个“类”,所以我认为没有生成默认函数。否则,人们会说您必须使用虚拟析构函数。这意味着如果我不定义析构函数virtual它将默认创建,而不是virtual。此外,我想知道为纯虚拟接口(interface)定义虚拟析构函数是否合理,如上所示?(所以这里没有使用指针或数据,所以不需要破坏任何东西)谢谢。 最

c++ - 没看懂Stroustup先生建议删除抽象类Shape的copy default和move操作

我试图理解作者在他的新书(TCPL第4版)中3.3.4SuppressingOperations中的建议,但无济于事。书摘Usingthedefaultcopyormoveforaclassinahierarchyistypicallyadisaster:Givenonlyapointertoabase,wesimplydon’tknowwhatmembersthederivedclasshas(§3.3.3),sowecan’tknowhowtocopythem.So,thebestthingtodoisusuallytodeletethedefaultcopyandmoveoper

c++ - 在 C++11 中以无锁方式原子交换两个 std::atomic<T*> 对象?

以下代码是从PARSECbenchmarksuiteforshared-memorymultiprocessors中的模拟退火应用程序中提取的原子指针类的框架。.在该应用程序中,中央数据结构是一个图形(更具体地说,是集成电路的网表)。图中的每个节点都有一个指示其物理位置的属性。该算法产生许多线程,每个线程重复并随机选择两个节点并交换它们的物理位置,如果这样可以为芯片带来更好的路由成本。由于图很大,每个线程都可以选择任意一对节点,唯一可行的解​​决方案是无锁并发数据结构(CDS)。这就是为什么以下AtomicPtr类是至关重要的(它用于以无锁方式自动交换指向两个物理位置对象的指针)。函数

c++ - 什么时候应该使用 std::atomic_compare_exchange_strong?

C++11中有两个原子CAS操作:atomic_compare_exchange_weak和atomic_compare_exchange_strong。根据cppreference:Theweakformsofthefunctionsareallowedtofailspuriously,thatis,actasif*obj!=*expectedeveniftheyareequal.Whenacompare-and-exchangeisinaloop,theweakversionwillyieldbetterperformanceonsomeplatforms.Whenaweakcom

c++ - 从多个线程为同一 vector 的不同范围调用 std::copy 是否安全?

我正在计算float来自多个线程的s并将结果存储在相同vector的非重叠范围内如下:在运行任何线程之前,我使用vector::reserve预先分配它.在每个线程中一个线程特定的vector计算结果然后将其复制到目标容器中,如下所示:vector::iteratordestination=globalVector.begin()+threadSpecificIndex;std::copy(localVector.begin(),localVector.end(),destination);这种做法安全吗? 最佳答案 首先vecto

c++ - 为什么是非法的: copying vector of pointers into a vector of pointers to constants

问题以下代码无法在C++11(或C++14)中编译。我理解编译器的错误输出,但为什么标准不允许?//main.cpp#includeintmain(void){doublea=3.0;doubleb=3.0;//Itworkswithmerepointersconstdouble*ptrToConst=&a;/***/double*ptrToObj=&a;//ptrToObj=ptrToConst;//Illegal:that'sunderstandable…ptrToConst=ptrToObj;//Works//Butthesamedoesn'tworkwithvectorstop