小编Pet*_*teC的帖子

为什么编译器没有合并多余的std :: atomic写入?

我想知道为什么没有编译器准备将相同值的连续写入合并到单个原子变量,例如:

#include <atomic>
std::atomic<int> y(0);
void f() {
  auto order = std::memory_order_relaxed;
  y.store(1, order);
  y.store(1, order);
  y.store(1, order);
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的每个编译器都会发出三次上面的编写.什么合法的,无种族的观察者可以看到上述代码与具有单次写入的优化版本之间的差异(即,不是"假设"规则适用)?

如果变量是易变的,那么显然不适用优化.在我的情况下有什么阻止它?

这是编译器资源管理器中的代码.

c++ multithreading compiler-optimization c++11 stdatomic

47
推荐指数
5
解决办法
4494
查看次数

在没有科学记数法的情况下格式化C++中的n位有效数字

我想将浮点值格式化为n位有效数字,但从不使用科学记数法(即使它更短).

格式规范%f不涉及有效数字,%g有时会给我科学记数法(这对我来说不合适).

我想要表格中的价值观"123", "12.3", "1.23" or "0.000000123".

有没有一种优雅的方法来使用C++或boost来做到这一点?

c++ format scientific-notation boost-format

9
推荐指数
1
解决办法
7396
查看次数