我正在为微控制器编写代码,并且需要确定我的结构是POD。我以为我可以使用“成员初始值设定项列表”来初始化成员,但是这不会通过“is_pod”测试。在下面的例子中,A是POD,B和C不是。添加“D()= default;”到D似乎使它成为POD。但是,通过这样做,我不能再有一个“成员初始化列表”?有没有办法让一个结构成为一个POD,并且有一个“成员初始化列表”?C++ Struct失败POD测试
#include <iostream>
#include <string>
struct A {
int var1;
};
struct B {
int var1;
//B() = default;
B() : var1(100) {}
};
struct C {
int bar [10];
C() : bar{0} {}
};
struct D {
int var1;
D() = default;
//D(int x) : var1(x) {}
};
int main()
{
std::cout << std::boolalpha;
std::cout << "\nIs A a POD = " << std::is_pod<A>::value;
std::cout << "\nIs B a POD = " << std::is_pod<B>::value;
std::cout << "\nIs C a POD = " << std::is_pod<C>::value;
std::cout << "\nIs tD a POD = " << std::is_pod<D>::value;
}
===更新1 ===
谢谢回复!所以,似乎没有办法在结构定义中初始化成员变量。下面的工作,但不像在结构本身的初始化那样优雅。
typedef struct A_ {
int var1;
} A;
A a = {
.var1 = 100
};
方便阅读:http://en.cppreference.com/w/cpp/concept/PODType – user4581301
这对重读有点神秘。我想你会因缺乏默认的构造函数而被解除封装。声明构造函数会除去默认构造函数,除非您通过显式声明默认构造函数来计数。 – user4581301
我相信你不能在pod-type结构中有任何自定义的初始化。 –