Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么函数的默认值是1?_C++_Function_C++14_Function Pointers_Default Value - Fatal编程技术网

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

C++ 为什么函数的默认值是1?,c++,function,c++14,function-pointers,default-value,C++,Function,C++14,Function Pointers,Default Value,我注意到带括号的构造函数的行为不同,至少对于浮点和整数是这样 // 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,

我注意到带括号的构造函数的行为不同,至少对于浮点和整数是这样

// 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
//int a,b{},c=T(),d=T{},e();
浮点a,b{},c=T(),d=T{},e();

endl(std::cout它不是一个函数指针,它实际上是一个函数(尽管是一个未定义的函数)

通过流式传输衰减的表达式
e
,您正在创建指向该函数的指针,并且所述指针是有效的,因为它指向您声明称为
e
的函数。因此,
1

您可以这样说,如果您首先声明了一个函数指针,并将其设置为
nullptr
,您将看到
0
,而不是流式处理。但是函数和函数指针是两件不同的事情

float e();

这将e声明为一个返回浮点且不带任何参数的函数。因此,它将衰减为一个函数指针,该指针将衰减为bool,并打印1,除非设置了
boolalpha

因此,
1
?你是说它打印为布尔值吗?事实上正是这样。对不起,我怀疑你了!@JohnP-Yep“我认为这是一个默认构造的函数”。它只是一个函数。没有什么是“默认构造”的,也没有必要“构造”“任何东西。我从链接器错误中看到了这一点,但我从打印的值中假设它必须有自己的值。我没有意识到我正在打印函数指针。顺便说一句,我制作了
Wrapper e()
构造了具有完美转发的
int-value
value
是1。同样的事情发生了吗,
int()
在变成
int
之前衰减为
int(*)和
bool
?我甚至添加了
Wrapper::Wrapper(void)
,只有
Wrapper e=Wrapper()
导致
值==0
。我尝试使用额外的括号来避免函数解析,如
包装器(e())
中所述,但值仍然是1。