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

时间:2011-02-16 11:42:00

标签: 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;
}

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

bool*尚未初始化为指向任何内容。

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

bool test;

t.abool = 0; // or NULL
t.abool = &test;

一旦指向实际的bool对象,您可以通过指针为该对象分配bool值:

*t.abool = true;
*t.abool = false;

答案 2 :(得分:1)

false起作用,因为g ++可能将0视为错误

答案 3 :(得分:1)

任何数字类型和值零的文字都可以隐式转换为空指针。 bool是数字类型,false的值为零。非零值(例如true)不能隐式转换为指针。