C++的原子变量初始化时直接赋值报错

C++
1243 0

1. 引言

Linux平台下,如下代码

// main.cpp
#include <atomic>
#include <iostream>

int main() {
    std::atomic_int value = 10;
    std::cout << value << std::endl;
    return 0;
}

std::atomic_int value = 10

使用C++11和C++14标准无法编译通过,C++17可以。

g++ -o out main.cpp --std=c++11
g++ -o out main.cpp --std=c++14

报错信息如下。

main.cpp:5:25: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
    5 |     std::atomic_int value = 10;
      |                         ^~

2. 原因

根据C++11语言规范,std::atomic的拷贝构造函数默认使用=delete标记为禁止编译器自动生成。Linux下的g++编译器遵循这个规范,Windows下的VC++编译器则没有遵循。

atomic& operator=(const automic&) = delete;

可以使用如下方式

    std::atomic_int value;
    value = 10;

C++17貌似解除了这个限制。

最后更新 2022-12-17
评论 ( 0 )
OωO
隐私评论