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。