这段C++代码也许令人惊讶地打印出1
。
#include <iostream>
std::string x();
int main() {
std::cout << "x: " << x << std::endl;
return 0;
}
x
是一个函数原型,看起来像是一个函数指针,在C++标准第4.12节的布尔转换中说:
4.12 布尔转换 [conv.bool] 1 算术类型、未作用域的枚举类型、指针类型或成员指针类型的prvalue可以转换为bool类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为bool类型的prvalue;结果值为false。
然而,x
从未绑定到一个函数。正如我所预期的,C链接器不允许这样做。但是在C++中,这根本不是问题。有人能解释一下这种行为吗?
int f() { return 1 / 0; }
只要f()
从未被调用就可以了)。 - M.M