【发布时间】:2011-03-17 05:12:26
【问题描述】:
我遇到了一些非常有趣的代码,让我想知道 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?
}
并且此代码运行 - 没有错误 - 并打印“thisBool is false”!
为了让这更奇怪,我运行了以下代码:
bool myBool = new bool();
...代码运行良好!
在你问我一个“noobish”问题之前给我投反对票
这是我的问题:是 bool 是什么?它是在逐个实现的基础上定义的吗?从上面显示的证据来看,我会说这是一个类。从实际的角度来看(忽略上述内容),将 bool 定义为 int / char 的 typedef 或将其定义为 #define 似乎也是合适的。但是如何知道它是什么(这会影响您如何对待它)?
编辑:我想我会补充一点,我正在使用 VS 2008。
【问题讨论】:
-
您只是不理解 C++ 引用的概念吗?
-
这不是 Java,顺便说一句。
bool myBool = new bool();没有做你怀疑的事情(导致内存泄漏,括号是不必要的)。 -
对于一些愚蠢但有趣的行为来说这是怎么回事: bool myBool = new bool(false); // myBool 现在等于 'true'
-
@adan_0:为什么不应该运行? “呃,取消引用任何人”评论是什么意思?您似乎误解了 C++ 引用的工作原理,但很难确定。您能向我们描述一下您对代码的期望吗?
-
这就是为什么您从不尝试从其他人那里获得知识来学习一门语言。它们是两种不同的语言,不要混用!你只会把自己搞砸。学习一门语言的唯一方法是从头开始,所以拿起一本书从那里开始。 stackoverflow.com/questions/388242/…