为什么 C++ 中没有隐式按位比较?

Why is there no implicit bitwise comparison in C++?

#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;
}

这篇文章没有按预期编译,考虑到这个设计决策的年代和(可能)依赖它的代码量,我们永远坚持下去。尽管如此,有没有人预感到其背后的最初原因?

例如,如果 S 包含指针,那么 S 的两个实例可能具有相同的内容,但它们的指针可能指向不同的内存(即使这些内存位置的数据相同)。

所以你的方案不能完全通用。

这是因为填充字节没有初始化,因此可以有任何值。

例如,如果S定义如下:

struct S {
    char m_c;
    int m_i;
};

m_cm_i 之间,有填充字节可以使 s1s2 比较不相等,即使所有成员都具有相同的值。

另一个原因是某些类型可能具有相同值的多个对象表示。