为什么c++中没有隐式的位比较?

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

本文关键字:比较 c++ 为什么      更新时间:2023-10-16
#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:

struct S {
    char m_c;
    int m_i;
};

m_cm_i之间存在填充字节,使得s1s2比较不相等,即使所有成员的值相同。

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

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

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