分配true和false时bool指针成员行为不同

gro*_*ter 3 c++ boolean member

我使用简单的bool指针类成员.分配错误的分配.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;
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*sha 10

这是因为转换从存在false0.因此它成为t.abool = 0;该初始化aboolNULL.但是,true转换为1并且由于无法使用绝对整数初始化指针,因此会出现编译器错误.在第二种情况下(评论这应该适用于IMO),当你试图取消引用一个调用未定义行为的单一化指针时,你会得到一个seg错误.


CB *_*ley 6

bool*还没有被初始化指向任何东西.

您可以为其指定一个空指针值(false将转换为),或指向bool对象的有效指针:

bool test;

t.abool = 0; // or NULL
t.abool = &test;
Run Code Online (Sandbox Code Playgroud)

一旦它指向一个实际的bool对象,你可以bool通过指针为该对象赋值:

*t.abool = true;
*t.abool = false;
Run Code Online (Sandbox Code Playgroud)