首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++17中不可复制变量的成员初始化

C++17中不可复制变量的成员初始化
EN

Stack Overflow用户
提问于 2019-09-30 08:44:18
回答 1查看 746关注 0票数 17

在对不可复制变量(如std::atomic<int>)执行成员初始化时,根据应答这里,需要使用direct-initialization而不是copy-initialization。但是,当我在g++ 7.4.0中打开g++ 7.4.0时,似乎后者也很好。

代码语言:javascript
复制
#include <atomic>

class A {
    std::atomic<int> a = 0;     // copy-initialization
    std::atomic<int> b{0};      // direct-initialization
};
代码语言:javascript
复制
$ 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,它也失败了。这里哪一个是对的?

EN

回答 1

Stack Overflow用户

发布于 2019-09-30 08:49:40

这里哪一个是对的?

7.4.0是正确的。对于这种情况,副本可以省略,这就是为什么它是可以的。(尽管这需要c++17)。

(更多细节请参见初始化 )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58164350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档