c++ - union 类型数据成员的初始化

标签 c++ c++11 constructor casting

使用 C++11 编译以下代码:

class CoolData {
public:
    typedef union {
        char char_t;
        int  int_t;
    } event_data_t;     

    CoolData() : _event_data(static_cast<event_data_t>(0)) {}

private:
    event_data_t _event_data;
};


int main() 
{
    return 0;
}

我得到以下编译错误:

prog.cpp: In constructor 'CoolData::CoolData()': prog.cpp:8:54: error: no matching function for call to 'CoolData::event_data_t::event_data_t(int)'
CoolData() : _event_data(static_cast<event_data_t>(0)) {}
                                                      ^
prog.cpp:6:4: note: candidate: CoolData::event_data_t::event_data_t()   } event_data_t;  
                                                                   ^
prog.cpp:6:4: note:   candidate expects 0 arguments, 1 provided 
prog.cpp:6:4: note: candidate: constexpr CoolData::event_data_t::event_data_t(const CoolData::event_data_t&)
prog.cpp:6:4: note:   no known conversion for argument 1 from 'int' to 'const CoolData::event_data_t&'
prog.cpp:6:4: note: candidate: constexpr CoolData::event_data_t::event_data_t(CoolData::event_data_t&&)
prog.cpp:6:4: note:   no known conversion for argument 1 from 'int' to 'CoolData::event_data_t&&'

我只想在初始化列表中用整数初始值初始化 _event_data
我该怎么做?

最佳答案

有多种选择可供选择。
您可以这样做:

CoolData() { _event_data.int_t = 0; }

或者这个:

class CoolData {
public:
    using event_data_t = union U {
        U() { int_t = 0; }
        char char_t;
        int  int_t;
    };

    CoolData() { }

private:
    event_data_t _event_data;
};

甚至这样:

class CoolData {
public:
    using event_data_t = union U {
        U(int v) { int_t = v; }
        char char_t;
        int  int_t;
    };

    CoolData(): _event_data{0} { }

private:
    event_data_t _event_data;
};

我怀疑最后一个就是你要找的那个。

关于c++ - union 类型数据成员的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910663/

相关文章:

c++ - 如何创建具有任意数量(编译时确定)容器的内存池?

android - 这种类型有一个构造函数,必须在这里初始化 - Kotlin

java - 在施工时双重优先于 float

c++ - 延迟crtp基类中的成员函数实例化

c++ - C++ 中的内存映射二进制日志记录

c++ - 为什么从方法返回时局部变量中的数据会损坏?

c++ - 如何在 C++ 代码中搜索所有构造函数?

c++ - UnaryFunction 在 std::for_each 中看起来如何

c++ - 在 MS-DOS 中使用长参数列表(超过 128 个字符)进行编译

c++ - 隐式转换和运算符重载