草庐IT

atomic-values

全部标签

c++ - 为什么我不能做 *value++;将该内存位置的值加一?

我知道要让它发挥作用,它需要voidincrement(int*value){(*value)++;}这是因为优先级的工作方式需要括号(如果我错了请纠正我)。但是当我执行以下操作时,为什么没有发生编译错误?该值未发生变化,这是意料之中的,因为没有括号,但这究竟发生了什么变化?voidincrement(int*value){*value++;} 最佳答案 value是一个指向整数的指针。指针算法的规则是说,如果你做一个像value++这样的操作,那么之后它将指向value+sizeof(int)(以字节为单位)。这里发生的事情是您将

c++ - 为什么 std::atomic 的 compare_exchange 会引用期望值?

std::atomic::compare_exchange_*的原因是什么?通过引用获取期望值,而不是通过值获取期望值? 最佳答案 如果操作失败,compare_exchange_*会将expected更改为实际值。它使循环更简单一些。 关于c++-为什么std::atomic的compare_exchange会引用期望值?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1998

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 std::is_const<const int&>::value 评估为 false?

这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果

c++ - 为什么 std::atomic 在 Visual C++ 中不是简单的类型?

Folly库需要std::atomic应该是一个普通的类型。这适用于gcc和clang,但对于VisualC++即使对于std::atomic也是如此。.为什么std::is_trivial返回false?#include#includestatic_assert(std::is_trivial>::value,"std::atomicnottrivial"); 最佳答案 std::atomic曾经是微不足道的(这需要TriviallyCopyable),但现在不再是了。参见thisanswer以获得有关如何以及为何发生变化的详尽解

c++ - 为什么这会导致 C2102 : '&' requires l-value

我在想,为什么下面这样的代码(已经注释掉了)会导致C2102:“&”需要左值是否有更好的方法来避免使用tmp变量?classa{private:int*dummy;public:int*get_dummy()const{returndummy;}};intmain(){aaa;//errorC2102:'&'requiresl-value//int**me=&(aa.get_dummy());//OK!int*tmp=aa.get_dummy();int**me=&(tmp);} 最佳答案 因为a::get_dummy()返回一个未

c++ - const void * 相对于 void * 提供什么值(value)?

在C++中,使用constvoid*作为函数的参数类型是否比void*更有值(value)?由于void*是不透明的,是否存在任何修改风险,除非用户执行reinterpret_cast,在这种情况下他们同样可以执行const_cast在constvoid*上,因此真的可以买任何东西吗?我问是因为我正在为共享指针使用实用程序模板类,它提供了void的专门化以避免void&问题,但没有为constvoid因此我想知道这是否只是一个疏忽,还是永远不需要它? 最佳答案 它提供了与const在其他指针类型上提供的相同的好处:除非您明确放弃co

c++ - valgrind Conditional jump or move depends on uninitialised value(s) ,这是否表示内存泄漏?

我在代码中遇到内存泄漏问题,在它运行时,堆不断增加到最大值,我需要重新启动服务,我运行了top命令,看到每当我调用一个场景时堆都在增加服务。我用valgrind运行服务,valgrind--log-file=log-feb19.txt--leak-check=full--show-reachable=yes--track-origins=yesmyservice我在运行场景时没有看到任何明显丢失或可能丢失的block,但我看到很多条件跳转或移动取决于未初始化的值错误。这些是否算作内存泄漏?我得到的例子:==27278==Conditionaljumpormovedependsonuni

c++ - 如何从模板参数(std::vector 和普通指针)中提取 value_type?

我有一个带有以下接口(interface)的排序:templatevoidmy_sort(RandomItfirst,RandomItlast){}我希望RandomIt成为std::vector.begin()/end()的迭代器或普通指针类型T*first,T*last.我想如果我假设RandomIt是一个vector,我可以从RandomIt::value_type得到它,但这不适用于T*first,T*last.我的问题是,如何提取value_typeT在这两种情况下都来自模板参数? 最佳答案 使用iterator_trai

报错:JSON parse error: Cannot deserialize value of type `long` from String “1,2“: not a valid `long` v

详细报错信息JSON parse error: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `long` from String "1,2": not a valid `long` value at [Source: (org.springframe