我遇到了一些非常有趣的代码,这让我想知道 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();
...代码运行良好!
在你因为我问了一个“菜鸟”问题而对我投反对票之前
这是我的问题:什么is布尔?它是在逐个实现的基础上定义的吗?从上面显示的证据来看,我会说这是一个类。从实际的角度来看(忽略上述内容),将 bool 定义为 int / char 的 typedef 或将其#define'd 似乎也是合适的。但人们如何知道它是什么(这会影响你如何对待它)?
编辑:我想我应该补充一点,我正在 VS 2008 中工作。
我只是没有看到你所描述的“奇怪”。
你声明一个bool
,初始化为true
。
通过调用函数并通过引用传递它,您可以将其值更改为false
.
然后你打印出这个值,它就起作用了。
问题是什么?更准确地说,有什么证据表明发生了奇怪的事情?
既然你想了解详情,bool
可能是一个字节(char
) or an int
。
当您为其指定 true/false 时,它会获取值 0 或 1。(使用sizeof
and printf("%d")
来检查它)。
我怀疑真正的问题是你不明白引用传递 of boolPtrHere
。你是not传递一个指向 bool 的指针。您正在通过内存引用传递实际值。 (将其视为不需要取消引用的指针)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)