网上的普遍建议是尽可能使用 auto
。
但这并不起作用:
auto cnt = std::atomic<int>{0};
这样做可以正常工作:
std::atomic<int> cnt {0};
有没有推荐的方法来与auto
一起使用?或者我应该假设这不可用于auto
?
网上的普遍建议是尽可能使用 auto
。
但这并不起作用:
auto cnt = std::atomic<int>{0};
这样做可以正常工作:
std::atomic<int> cnt {0};
有没有推荐的方法来与auto
一起使用?或者我应该假设这不可用于auto
?
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
g++
编译并使用-std=c++17
标准,它可以正常工作。但在C++11/C++14标准下会失败。 - ShadowRanger