我正在学习C ++。我的背景是:.NET和VB6。
我对以下网页关于布尔值的说法很感兴趣:http://msdn.microsoft.com/en-us/library/ff381404(v=vs.85).aspx即
“尽管有TRUE的这个定义,但是大多数返回BOOL类型的函数都可以返回任何非零值来表示布尔真值。因此,你应该总是这样写:
// Right way.
BOOL result = SomeFunctionThatReturnsBoolean();
if (result)
{
...
}
“
这是否也适用于VB6,即问题是:If BooleanValue = True Then
?
答案 0 :(得分:8)
Windows API旨在用于C程序。直到C99没有 bool 类型。并且仍然不完全,例如,C99从未被Microsoft编译器实现。因此,他们必须提出一种解决方法,与C编译器处理逻辑值的方式高度兼容。一个int,其中0表示false,其他任何条件都为true。因此建议。
VB6有一个专用的布尔类型和文字值True和False的关键字,因此不会有相同的问题。但是,对于写得不好的COM服务器,您仍会遇到麻烦。 True的底层整数值为-1,与许多其他语言的逻辑布尔类型的实现高度不兼容。包括C.有一个很好的理由认为VB6是奇怪的,它的And和Or运算符不区分逻辑和算术和/或。通过使True等于-1而False等于0,没有区别。当COM服务器返回1以指示true而不是VARIANT_TRUE时,可能会出现问题。
但最重要的是,写If booleanVariable = True Then
只是丑陋而且黑板钉在许多程序员身上。只需写下If booleanVariable Then
即可完成。
答案 1 :(得分:2)
不在VB中,不,因为True
/ False
是真正的布尔值。但是,在C / C ++中,BOOL
只是int
的#define,因此您可以为BOOL变量赋值任何整数值(C中的TRUE
是#define为1(通常)和FALSE
#define为0)。
如果您希望与VB体验更好地重叠,请使用C ++中的bool
数据类型,该数据类型使用实际的true
/ false
值。
编辑:当然,在VB中你说If BooleanValue = TRUE
。在C ++中,等价物是if (BooleanValue == true)
(注意 == ,它是一个比较运算符,而不是 = ,它是一个赋值运算符),但在C ++,您可以跳过== true
比较,只使用if (BooleanValue)
。