C Struct未通过POD测试
发布时间:2020-12-16 06:54:13 所属栏目:百科 来源:网络整理
导读:我正在为微控制器编写代码,需要确保我的结构是POD.我以为我可以使用“成员初始化列表”来初始化成员,但这不会通过“is_pod”测试.在下面的示例中,A是POD,B和C不是.添加“D()=默认值;”到D似乎使它成为POD.但是,通过这样做,我不能再有“成员初始化列表”?结
我正在为微控制器编写代码,需要确保我的结构是POD.我以为我可以使用“成员初始化列表”来初始化成员,但这不会通过“is_pod”测试.在下面的示例中,A是POD,B和C不是.添加“D()=默认值;”到D似乎使它成为POD.但是,通过这样做,我不能再有“成员初始化列表”?结构是否有办法成为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 }; 解决方法
POD必须是
trivial type,这需要:
一个简单的构造函数有一个不执行任何操作的描述.所以“在结构本身中进行初始化”明确地反对它. 您感兴趣的硬性要求是:
您必须在构造函数的定义中使用var1的默认构造函数.即var1(100)是“no bueno”. (旁注:您可以使用成员ctor,但只能使用默认形式,例如var1(),这与省略它相同). 请注意,在声明对象时使用聚合初始化与将其设置为默认值相比存在重大差异.设置这些变量需要一些工作,POD的默认创建“不能没有”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |