在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};工作正常,不调用任何移动构造函数,而是就地初始化对象。


以上是在C++中,为什么auto不适用于std::atomic?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>