草庐IT

C++11 原子类和操作——我说得对吗

我的以下假设是否正确:我不需要显式同步对std::atomic的访问来自任何平台上不同线程的对象与我自己的同步对象std::atomic操作可以是无锁的或非无锁的,具体取决于平台std::atomic_bool和std::atomic(以及其他类似的类型)实际上是相同的东西std::atomic_flag是唯一按照标准保证平台无关的无锁操作的类另外,我在哪里可以找到有关std::memory_order的有用信息?以及如何正确使用它? 最佳答案 让我们一一过一遍。我不需要显式同步对std::atomic的访问来自任何平台上不同线程的

C++11:v = { } 和 v { } 之间的区别

这个问题在这里已经有了答案:Are={}and{}-styleinitializationsthesameinC++11?(3个答案)关闭8年前。请问下面两种说法有什么区别吗://C++11std::vectord{1,2,3};std::vectord={1,2,3};在这两种情况下,序列构造函数都会被调用:classA{public:inta;A(){coute){coute){cout

c++ - 范围基数并插入 vector C++11

是否可以在迭代C++11时更改vector的大小?显然迭代器将失效,但是否仍可以使用以下干净的语法?std::vectorvec;for(autoelem:vec){if(condition(elem)){new_elem=function(elem);vec.insert(iterator_associated_with_elem+1,new_elem);}//Don'tinsertoncondition(new_elem)}如果不是,完成此任务的最干净的代码是什么? 最佳答案 不,你不能。标准要求基于raged的​​for的行为

【java】使用 BeanUtils.copyProperties 11个坑(注意事项)

文章目录背景第1个坑:类型不匹配第2个坑:`BeanUtils.copyProperties`是浅拷贝第3个坑:属性名称不一致第4个坑:Null值覆盖第5个坑:注意引入的包第6个坑:Boolean类型数据+is属性开头的坑第7个坑:查找不到字段引用第8个坑:不同内部类,即使相同属性,也是赋值失败第9个坑:bean对应的属性,没有getter和setter方法,赋值失败第10个坑:BeanUtils.copyProperties+泛型第11个坑:性能问题替换BeanUtils.copyProperties的方案背景我们日常开发中,经常涉及到DO、DTO、VO对象属性拷贝赋值,很容易想到org.s

C++11 VS2013类POD成员初始化

我到处都在寻找对此的解释,但我做空了。我从VS2013v120平台工具集中看到了这种行为,但是当我将工具集设置为v90(VS2008工具集)时,一切都未初始化。我相信这是由于C++11中的一些变化,但也可能是v120平台工具集的异常。谁能解释一下C++/C++11级别的情况?也就是说,为什么b被清零了?为什么j也没有归零?(即为什么结构的行为与类的行为不同)此外,我知道我输出数据的方式是未定义的行为,请忽略它。在这里发布这种方式比调试器窗口更容易。这是在32位上运行的,因此指针的大小与unsignedint相同。考虑以下代码:#includeclassFoo{public:inta,*

C++11 具有非原子变量的原子内存顺序

我不确定c++11中原子变量的内存排序保证如何影响对其他内存的操作。假设我有一个线程定期调用写入函数来更新值,另一个线程调用读取函数来获取当前值。是否保证d=value;的效果不会在a=version;的效果之前看到,而会在b=的效果之前看到版本;?atomica{0};atomicb{0};doubled;voidwrite(intversion,doublevalue){a=version;d=value;b=version;}doubleread(){intx,y;doubleret;do{x=b;ret=d;y=a;}while(x!=y);returnret;}

c++ - C++11/C++14 中的自动和大括号初始化

这个问题在这里已经有了答案:Differentcompilerbehaviorforexpression:autop{make_pointer()};(1个回答)关闭7年前。当我用clang和gcc编译下面的代码时T推导不同。#include//forclang//toseehowTisdeduced(formcompilererror).templatevoidfoo(T);intmain(){autovar1{2};foo(var1);}这是我得到的。clang3.6(c++11/c++14)gcc4.9(c++11/c++14)T=std::initializer_listgcc

c++ - 在 C++ 11 中创建动态二维矩阵的好方法

我已经知道如何使用new创建动态二维矩阵并使用delete释放它。由于C++11具有许多新的内存特性,例如unique_ptr、array容器等;什么是创建二维矩阵的好方法,这样就不需要使用delete运算符显式释放矩阵? 最佳答案 最简单的方法之一是使用vector的vectorconstintN=10;constintM=10;vector>matrix2d(N,vector(M,0));//10x10zero-initializedmatrixmatrix2d[0][0]=42;您当然可以使用单个vector并将其包装到访问器

c++ - 在 C++11 之前移动语义是如何解决的?

我最近一直在阅读移动语义以及它是如何被引入到C++11中的。主要要点是,通过“窃取”指向临时对象的指针来创建对象,程序可以变得更有效率。这比深拷贝临时对象来创建新对象要高效得多。在C++11(及更高版本)中,这是通过使用右值引用来实现的。所有临时对象(在程序内存中没有已知位置的对象)都被视为右值。具体来说,现在可以重载类构造函数以接受右值引用。所以我很好奇,在C++11之前,这个“昂贵的临时对象拷贝”问题是如何解决的? 最佳答案 完成此操作的主要方式是通过std::swap。std::swap可以重载/专门用于可以比默认的“通过临时

c++ - 如何理解独立 C 或 C++ 实现中的原子?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。ImprovethisquestionC11和C++11根据执行线程定义原子。虽然在托管环境中线程是什么很清楚,但在独立语言实现中它是一个相当模糊的术语。如何在所有线程都必须在程序内部实现的独立实现中正式理解C11和C++11中指定的原子?例如:ISR是一个单独的执行线程吗?为什么标准委员会根据线程而不是简单地在代码排序领域定义原子?除了gcc之外,是否有任何嵌入式编译器已经支持C11/C++11原子?