我知道三元运算符有一些令人惊讶的限制,但是我有点困惑,为什么这段代码对我来说不能通过编译:
void foo(bool b)
{
int* ptr = ((b) ? NULL : NULL);
}
显然这只是展示问题所需的最小信息。错误信息如下:
[BCC32 Error] Unit11.cpp(20): E2034 Cannot convert 'int' to 'int *'
编译器是不完全符合Embarcadero C++Builder 2010的,所以编译器Bug并非不可能发生...
注:为避免混淆我的意图,已修改括号。
注2:我已经有点困惑了,不知道如何构建这个语句,所以在此解释一下:当b、c和d都是复杂表达式时,在类似a = b? c : d
的行中会出现一些编译错误。为了缩小范围,我使用NULL
替换了c
和d
以检查b
是否有问题。在这一点上,一切都变得一团糟。
nullptr
,但是在大多数实现中,NULL
实际上是一个定义为字面整数的宏,即#define NULL 0
。 - AJG85nullptr
突出显示为关键字,但遗憾的是编译器失败了。BCB2010具有一些C++0x的好处,但不是全部。 - Roddy