c – 复制“struct atomic”的构造函数
发布时间:2020-12-16 09:54:47 所属栏目:百科 来源:网络整理
导读:我有以下代码: enum class State : uint32_t{ FREE,IDLE,COAST,MOVE,STOP};std::atomicState car1_state = State::IDLE; --- Line astd::atomicState car2_state(State::IDLE); --- Line b 以下是原子头文件的片段: // c++ header file - atomictemplatety
我有以下代码:
enum class State : uint32_t { FREE,IDLE,COAST,MOVE,STOP }; std::atomic<State> car1_state = State::IDLE; <--- Line a std::atomic<State> car2_state(State::IDLE); <--- Line b 以下是原子头文件的片段: // c++ header file - atomic template<typename _Tp> struct atomic { private: _Tp _M_i; public: atomic() noexcept = default; ~atomic() noexcept = default; atomic(const atomic&) = delete; <--- Line c atomic& operator=(const atomic&) = delete; atomic& operator=(const atomic&) volatile = delete; constexpr atomic(_Tp __i) noexcept : _M_i(__i) { } <--- Line d operator _Tp() const noexcept { return load(); } operator _Tp() const volatile noexcept { return load(); } _Tp operator=(_Tp __i) noexcept { store(__i); return __i; } .... 我有几个问题: >线b编译好.我在线d中理解构造函数被调用.对? 有人可以帮我理解为什么/如何线路a最终呼叫线路c(而不是线路d). 解决方法
复制初始化需要可访问的非显式复制或移动构造函数,因为它正式初始化来自相同类型的临时prvalue的变量.那是,
Foo a = x; 相当于: Foo a = Foo(x); 您的类型没有可访问的复制构造函数,因此出错.相比之下,直接初始化不需要复制构造函数: Foo a(x); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |