#include <iostream>
using namespace std;
struct S {
int m_i;
};
int main() {
S s1;
// okay - implicit copy constructor
S s2(s1);
S s3;
// okay - implicit copy assignment
s3 = s1;
// awkward
if(s1 == s2)
cout << "can't be" << endl;
return 0;
}
这篇文章没有按预期编译,鉴于这个设计决定的年龄和(可能)依赖于它的代码量,我们永远坚持下去。不过,有没有人对其背后的最初原因有所预感?
答案 0 :(得分:4)
如果S包含指针,那么S的两个实例可能具有相同的内容,但它们的指针可能指向不同的内存(即使这些内存位置的数据相同)。
所以你的计划不能完全普遍。
答案 1 :(得分:4)
这是因为填充字节没有初始化,因此可以有任何值。
例如,如果S
定义如下:
struct S {
char m_c;
int m_i;
};
在m_c
和m_i
之间,有填充字节可以使s1
和s2
比较不相等,即使所有成员都具有相同的值。
另一个原因是某些类型可能具有相同值的多个对象表示。