我使用简单的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;
}
答案 0 :(得分:10)
这是因为存在从false
到0
的转换。因此,使用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
)不能隐式转换为指针。