我使用简单的 boolean 指针类成员。分配错误的响应。 true的行为有所不同-请参见代码中的注释。
我胜过一个,下面测试另一个。

我使用编译器调用g++ -o basic basic.cpp

class Test
{
public:
    int a;
    bool* abool;
};


int main() {
    Test t;

    //t.abool = false;              // WORKS
    //t.abool = true;               // ERROR: cannot convert 'bool' to 'bool*' in assignment - expected IMO;

    // this should work for both values IMO
    //*(t.abool) = true;            // Segmentation fault
    //*(t.abool) = false;           // Segmentation fault



    cout << t.abool << endl;

    return 0;
}

最佳答案

那是因为存在从false0的转换。因此它变成了t.abool = 0;,正在使用abool初始化NULL。但是,true会转换为1,并且由于无法使用绝对整数初始化指针,因此会出现编译器错误。在第二种情况下(带有注释,这应该在IMO上起作用),当您尝试取消引用调用未定义行为的统一指针时,将遇到段错误。

09-28 11:45