以下内容出现在Stroustrup C ++第4版中。第164页。
T v3 = f();
T v3 {f()}; // works if and only if the type of f() can be implicitly converted to a T
auto v3 = f(); // v3 is of some appropriate type
有没有人举例说明这些例子的类型为T
?
我对将函数分配给变量的理解如下:
void (*fptr)(void) = &f;
[不幸的是,这不是RHS f()
的形式。因此,对于上述示例的用例,我有点困惑。
谢谢
您未在此处分配功能指针。 f()
表示调用任何()
的f
运算符并返回结果。因此,如果我们说f
是
int f() { return 42; }
然后用于
T v3 = f();
T
必须是可以从int
创建的内容。带有
T v3 {f()};
T
必须是可以从int
创建的内容,也不能是缩小转换。带有
auto v3 = f();
v3
将具有遵循模板参数删除规则的类型,因此在这种情况下为int
。如果f
返回一个int&
,尽管该推导规则不会创建引用,但它仍将是一个int
。
涉及f()
的赋值处理的是f()
的返回值,而不是函数f
作为值。因此,当T
的返回类型为int
时,f
可以是char
。