为什么函数的默认值是1?

时间:2018-12-10 16:47:08

标签: c++ function c++14 function-pointers default-value

我注意到带括号的构造函数的行为有所不同,至少对于浮点数和整数而言。

class

这不是默认的构造函数,括号被解析为该类型的一部分。我打印了这些类型,并且// int a, b{}, c = T(), d = T{}, e(); float a, b{}, c = T(), d = T{}, e(); endl(std::cout << a << ", " << b << ", " << c << ", " << d << ", " << e); // 0, 0, 0, 0, 1 的类型为e(或者只是float (&)(),带有正确的转发),所以我认为它是默认构造的函数。调用它的结果具有类型,但是调用它会导致您期望的链接器错误。如果它是一个函数指针,则其值为0。为什么它的值是1,或者在打印时它最终变成1?

2 个答案:

答案 0 :(得分:3)

float e();

这将e声明为一个返回float且不带参数的函数。因此,除非设置了boolalpha,否则它会衰减为一个函数指针,该函数指针会变为显示1的布尔值。

答案 1 :(得分:2)

它不是函数指针,实际上是一个函数(尽管未定义)。

通过流送衰减的表达式e,您正在创建指向该函数的指针,并且该指针有效,因为它指向您声明为{的函数{1}}。因此,e

您说的很对,如果您声明一个函数指针开始并将其设置为1,那么您会看到nullptr而不是通过流式传输。但是函数和函数指针是两件事。