输出不带()的函数名为何未报错反而打印1?C++代码疑问
问题原因解析
这段代码之所以打印出1而非报错,核心在于C++的函数名隐式转换规则:
- 代码里的
cout << res;中,res是函数名,在C++中,函数名会被隐式转换为指向该函数的指针(只要不是用于取地址、直接调用等场景)。 - 标准库的
ostream(即cout的类型)没有提供直接输出函数指针的重载,编译器会自动将函数指针转换为可匹配的bool类型:只要函数指针非空(这里res是有效的函数,指针显然不为空),就会被转成布尔值true。 - C++中默认输出布尔值
true时,会打印出1(如果想输出字符串true,需要先执行cout << boolalpha;开启对应格式)。
补充:如果想要调用函数并输出它的返回值,代码应该写成cout << res(任意整数参数);,这样才会执行res函数并输出返回的55。
内容的提问来源于stack exchange,提问作者أحمد خالد
相关产品推荐
相关产品推荐

