【发布时间】:2013-01-07 00:06:38
【问题描述】:
我们有以下类型X和函数f:
struct X { ... };
X f() { ... };
现在考虑另一个函数g的三个替代定义:
(1)
void g()
{
X x = f();
...
}
(2)
void g()
{
X& x = f();
...
}
(3)
void g()
{
X&& x = f();
...
}
三种不同情况之间的定义行为(或潜在行为)有何不同? (假设占位符 '...' 代码在三种情况下是相同的)
更新:
如果g 返回X 会怎样:以下合法且正确吗?
X g()
{
X&& x = f();
...
return move(x);
}
(这个动作有必要吗,有什么作用吗?)
您是否希望 RVO 链接,以便下面的代码生成相同的代码?
X g()
{
X x = f();
...
return x;
}
【问题讨论】:
-
数字 2 不是有效的 C++。 (1) 和 (3) 的区别在于 variable
x的类型,但 表达式x的值在两者中是相同的。