在C++中,为什么auto不能与std::atomic一起使用?

4

网上的普遍建议是尽可能使用 auto

但这并不起作用:

auto cnt = std::atomic<int>{0};

这样做可以正常工作:

std::atomic<int> cnt {0};

有没有推荐的方法来与auto一起使用?或者我应该假设这不可用于auto


如果我使用g++编译并使用-std=c++17标准,它可以正常工作。但在C++11/C++14标准下会失败。 - ShadowRanger
1个回答

10

std::atomic是不可移动的,因为它有一个已删除的复制构造函数。在C++17之前,auto cnt = std::atomic<int>{0};尝试调用移动构造函数将临时对象移动到cnt中,因此你不能几乎总是使用带有std::atomic的自动类型推断。

C++17引入了强制拷贝省略,因此auto cnt = std::atomic<int>{0};可以正常工作,不会调用任何移动构造函数,而是直接就地初始化对象。


你是对的!从 C++14 切换到 C++17 让错误消失了。 - Plasty Grove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接