C++11 普通旧对象默认值

标签 c++ c++11 initialization

如何在 C++11 中初始化 POD(普通旧数据)的成员变量?

class A {
public:
    int theAnswer; // this is not initialized
};

static_assert(std::is_pod<A>::value, "A must be a plain old object");

class B {
public:
    int theAnswer { 42 }; //  this should initialize to 42
};

static_assert(std::is_pod<B>::value, "B must be a plain old object"); // ERROR

class C {
public:
    C() : theAnswer { 42 } { } // Obviously, this is not a trivial default constructor, so it does not work
    int theAnswer;
};

static_assert(std::is_pod<C>::value, "C must be a plain old object"); // ERROR

最佳答案

您在初始化整个对象的地方执行此操作。一个普通的旧数据对象就是:普通的旧数据,没有不变量、初始化或任何花哨的东西。如果要初始化,那就不是POD了。

但也许您实际上并不需要 POD。也许平凡可复制就足够了?如果您想做的只是对象之间的 memcpy,那么您正在寻找的特征是简单可复制,而不是 POD。

关于C++11 普通旧对象默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754024/

相关文章:

c++ - 无法将 lambda 表达式作为引用传递

c++ - 模板特化中的多个 void_t 调用

c - 将结构数组初始化为全 0 的最快方法?

c++ - 为什么在 C++ 中将变量定义和初始化分开?

c++ - Visual C++ 中的分布式构建工具?

c++ - 使用参数构造函数模拟 new[]

c++ - 是否可以编写一个同时接受右值和左值的模板函数

c++ - 不执行任何操作且编译时带有 4 级警告的函数

c++ - 如果使用 Makefile 编译,代码可以正常工作,如果使用 XCode 编译,代码会崩溃

objective-c - 从 Swift 隐藏 Objective-C 初始化器(或方法)