Sza*_*lcs 47 c++ copy-constructor
假设我有这样的POD类型:
struct A {
char a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
在我的系统上,sizeof(A) == 8即使sizeof(char) == 1和sizeof(b) == 4.这意味着数据结构有3个未使用的字节.
现在假设我们这样做
A x = ...;
A y =x;
Run Code Online (Sandbox Code Playgroud)
题:
难道是保证所有8个字节的x和y将是相同的,即使是那些3分未使用的?
同样,如果我将某些A对象的底层字节转移到另一个不理解其含义或结构的程序,并将它们视为一个8字节的数组,那么其他程序可以安全地比较两个As的相等吗?
注意:在使用gcc 7的实验中,似乎会复制这些字节.我想知道这是否有保证.
Bau*_*gen 43
非联合类X的隐式定义的复制/移动构造函数执行其基础和成员的成员复制/移动.
12.8/15 [class.copy]在N4141中
因此允许填充字节中的位模式不同.
它不是权威的,但是cppreference条目std::memcmp建议填充字节可能不同:
memcmp()类型的两个对象之间struct{char c; int n;}将比较填充字节,其值时的值可能不同c,并n是相同的
鉴于您询问了POD类型(因此包括工会),值得一提的是,根据[class.copy]
联合X的隐式定义的复制/移动构造函数复制X的对象表示(6.9)
对于简单的可复制类型,也应该包括填充位.所以,这可能只是用A替换A的问题
union A{ struct {
char a;
int b;
}; };
Run Code Online (Sandbox Code Playgroud)
(实际上,上面使用的是非标准的匿名结构,但是你明白了......)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |