在C++中,为什么auto不适用于std::atomic?
网上的一般建议似乎是尽可能使用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几乎无法始终使用auto。
C++17 给我们带来了强制复制省略,所以auto cnt = std::atomic<int>{0};工作正常,不调用任何移动构造函数,而是就地初始化对象。