gpt4 book ai didi

c++ - 为什么将类型 T& 转换为 T 会创建一个临时对象?

转载 作者:太空狗 更新时间:2023-10-29 23:39:09 25 4
gpt4 key购买 nike

在 Effective STL item 22 Meyers 似乎暗示将 T& 转换为 T 会实例化一个临时对象;也就是

T x;
T& y = x;
((T)(y)).doSomething();

导致 doSomething() 在临时而不是 x 上完成。

为什么转换结果必须是临时的?

最佳答案

Why must the cast result in a temporary?

根据标准,(T)(y) 构造一个 T 类型的临时值

C++11 标准中描述了使用强制转换符号的显式类型转换的行为,如下所示:

5.4 Explicit type conversion (cast notation)

1 The result of the expression (T) cast-expression is of type T. The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type; otherwise the result is a prvalue.

在你的情况下,

T 不是左值引用。
T 不是函数类型的右值引用。
T 不是对象类型的右值引用。

因此,结果是 T 类型的纯右值。

如果您进一步查看 prvalue 和 rvalue 的定义(第 3.10 节),结果是一个临时对象。

临时对象是使用显式类型转换(函数符号)构造的。

来自 C++11 标准(强调我的):

5.2.3 Explicit type conversion (functional notation)

1 A simple-type-specifier (7.1.6.2) or typename-specifier (14.6) followed by a parenthesized expression-list constructs a value of the specified type given the expression list.

关于c++ - 为什么将类型 T& 转换为 T 会创建一个临时对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com