这个 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 算术、无范围枚举、指针或指向成员类型的指针的纯右值可以转换为 bool 类型的纯右值。将零值、空指针值或空成员指针值转换为 false;任何其他值都将转换为 true。对于直接初始化 (8.5),std::nullptr_t 类型的纯右值可以转换为 bool 类型的纯右值;结果值为假。
但是,x
永远不会绑定到函数。正如我所料,C 链接器不允许这样做。但是在 C++ 中,这根本不是问题。谁能解释这种行为?