这似乎适用于我的编译器,但它是标准的吗?我应该做一个memcpy吗?
struct Foo { u32 a, b; u8 c[24]; }
class Bar {
Foo f;
public:
Bar(Foo&f):f(f){}
};
答案 0 :(得分:1)
在C ++ 11国际标准中,struct Foo
被视为POD
(普通旧数据,参见第9条规范#10),它是trivially copyable type
(参见条款) 3.9规范#9)。
按位复制通常由类型的大小决定,对于小类型,它可以被优化为简单的movl/movq
指令。编译器将完成这项工作,因此您在memcpy
的构造函数块中不需要class Bar
,因为您已在初始化列表Bar(Foo&f):f(f)
中设置了值。