[自动和{}-关于Stroustrup C ++的列表问题

问题描述 投票:0回答:2

以下内容出现在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()的形式。因此,对于上述示例的用例,我有点困惑。

谢谢

c++ c++11
2个回答
0
投票

您未在此处分配功能指针。 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


0
投票

涉及f()的赋值处理的是f()的返回值,而不是函数f作为值。因此,当T的返回类型为int时,f可以是char

© www.soinside.com 2019 - 2024. All rights reserved.