【发布时间】:2020-01-29 12:56:33
【问题描述】:
在对不可复制变量(如std::atomic<int>)进行成员初始化时,根据答案here,需要使用direct-initialization而不是copy-initialization。但是当我在g++ 7.4.0 中打开-std=c++17 时,似乎后者也可以正常工作。
#include <atomic>
class A {
std::atomic<int> a = 0; // copy-initialization
std::atomic<int> b{0}; // direct-initialization
};
$ g++ -c atomic.cc -std=c++11 // or c++14
atomic.cc:4:26: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
std::atomic<int> a = 0; // copy-initialization
$ g++ -c atomic.cc -std=c++17
// no error
在使用g++ 6.5.0 编译时,即使使用-std=c++17 也会失败。这里哪一个是正确的?
【问题讨论】:
标签: c++ initialization language-lawyer c++17 copy-elision