结构复制标准吗?

时间:2014-10-31 04:23:10

标签: c++

这似乎适用于我的编译器,但它是标准的吗?我应该做一个memcpy吗?

struct Foo { u32 a, b; u8 c[24]; }
class Bar {
    Foo f; 
public: 
    Bar(Foo&f):f(f){} 
};

1 个答案:

答案 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)中设置了值。