我不明白为什么下面的代码编译?
int main()
{
//int a = nullptr; // Doesn't Compile
//char b = nullptr; // Doesn't Compile
bool c = nullptr; // Compiles
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而评论部分没有.
这两个bool和nullptr是关键字,那么什么是关于其他数据类型的独特之处?
我遇到了一些非常有趣的代码,让我想知道bool是什么.我一直认为它是一个原始类型,如int或char或long.但今天,我看到的东西看起来像这样:
void boolPtrTest()
{
bool thisBool = true;
boolPtrHere(thisBool);
printf("thisBool is %s\n", thisBool ? "true" : "false");
}
void boolPtrHere(bool& theBool)
{
theBool = false; // uhh, dereferencing anyone?
}
Run Code Online (Sandbox Code Playgroud)
这段代码运行 - 没有错误 - 并打印"thisBool是假的"!
为了进一步使这个奇怪,我运行以下代码:
bool myBool = new bool();
Run Code Online (Sandbox Code Playgroud)
......代码运行正常!
这是我的问题:什么是布尔?它是在逐个实施的基础上定义的吗?从上面显示的证据,我会说它是一个阶级.从实际角度来看(忽略上述内容),将bool定义为int/char的typedef或者将其定义为#define'd似乎也是合适的.但是,如何知道它是什么,(这将影响你如何对待它)?
编辑:我想我会补充说我在VS 2008工作.