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