为什么一个函数的默认值是1?
Why is the default value of a function 1?
我注意到带括号的构造函数的行为不同,至少对于浮点数和整数。
// 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 (&)()
(或者只有 float()
并进行了适当的转发),所以我认为这是一个默认构造的函数。调用它的结果有一个类型,但调用它会导致您预期的链接器错误。如果它是一个函数指针,它的值将为 0。为什么它的值会是 1,或者它打印出来的时候怎么会变成 1?
它不是一个函数指针,它实际上是一个函数(尽管是一个未定义的函数)。
通过流式传输表达式 e
,它会衰减,您正在 创建 指向该函数的指针,并且该指针是有效的,因为它指向您要创建的函数已宣布名为 e
。因此,1
.
你说得对,如果你声明一个函数指针开始,并将其设为 nullptr
,你会看到 0
而不是流式传输它。但是函数和函数指针是两个不同的东西。
float e();
这将 e 声明为 returns 浮动且不带参数的函数。因此,除非设置了 boolalpha
,否则 This 会衰减为一个函数指针,该函数指针会衰减为打印 1 的 bool。
我注意到带括号的构造函数的行为不同,至少对于浮点数和整数。
// 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 (&)()
(或者只有 float()
并进行了适当的转发),所以我认为这是一个默认构造的函数。调用它的结果有一个类型,但调用它会导致您预期的链接器错误。如果它是一个函数指针,它的值将为 0。为什么它的值会是 1,或者它打印出来的时候怎么会变成 1?
它不是一个函数指针,它实际上是一个函数(尽管是一个未定义的函数)。
通过流式传输表达式 e
,它会衰减,您正在 创建 指向该函数的指针,并且该指针是有效的,因为它指向您要创建的函数已宣布名为 e
。因此,1
.
你说得对,如果你声明一个函数指针开始,并将其设为 nullptr
,你会看到 0
而不是流式传输它。但是函数和函数指针是两个不同的东西。
float e();
这将 e 声明为 returns 浮动且不带参数的函数。因此,除非设置了 boolalpha
,否则 This 会衰减为一个函数指针,该函数指针会衰减为打印 1 的 bool。