led*_*ter 7 c++ implicit-conversion lvalue-to-rvalue
实际上,我在网上看到的每个左值到右值转换的例子都与诸如int
等的基本类型有关。
我自己找不到适用于类类型的 l2r 示例;在所有看似适用的例子中,通常有一个函数涉及 lvalue-ref(如 copy-ctor),为此 l2r 似乎被抑制(参见例如这个问题)。
然而,在 l2r 本身的描述中,有一个关于类类型的子句(来自 [conv.lval]):
转换的结果根据以下规则确定:
<...> 如果 T 具有类类型,则转换从泛左值复制初始化 T 类型的临时值,并且转换的结果是临时值的纯右值。
有人可以举一个这个条款的例子吗?我不能。
一个例子是丢弃值表达式中的易失性对象:
struct A {};
void f()
{
volatile A a;
a;
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,表达式仅因其副作用而出现。这样的表达式称为丢弃值表达式。不应用数组到指针和函数到指针的标准转换。当且仅当表达式是 volatile 限定类型的左值并且是以下其中一项时,才会应用左值到右值的转换:
- ...
- id 表达式,
- ...
左值到右值的转换应用于a
。