#include <iostream>
int main(){
std::cout << main << std::endl;
return 0;
}
为什么命令行会打印出1?
#include <iostream>
int main(){
std::cout << main << std::endl;
return 0;
}
您的程序存在问题。N4140:
§3.6.1/3 函数
main
不应在程序中使用。[...]
如果我们假设程序没有问题,最有可能的解释是标准转换:
§4.3/1 函数类型
T
的左值可以转换为类型为“指向T
的指针”的纯右值。结果是函数的指针。§4.12/1 算术、未作用域枚举、指针或指向成员类型的纯右值可以转换为类型
bool
的纯右值。零值、空指针值或空成员指针值转换为false
;任何其他值转换为true
。对于直接初始化(8.5),类型为std::nullptr_t
的纯右值可以转换为类型为bool
的纯右值;结果值为false
。
如果您坚持这样做,请尝试:
std::cout << (void*)main << std::endl;
std::ostream
没有接受带有签名 int (*)(void)
的函数指针的 <<
运算符,这就是为什么指针被转换为另一种类型的原因。 - Remy Lebeau
main
函数是特殊的... - Deduplicatormain
函数。大多数编译器会发出警告。 但对于普通函数的名称,它仍然会打印1
,因为函数指针被隐式转换为bool
类型。 - T.C.