VB6和C ++布尔文字

时间:2012-01-01 14:18:24

标签: c++ vb6

我正在学习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

2 个答案:

答案 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)