想像:
S f(S a) {
return a;
}
Run Code Online (Sandbox Code Playgroud)
为什么不允许别名a和返回值槽?
S s = f(t);
S s = t; // can't generally transform it to this :(
Run Code Online (Sandbox Code Playgroud)
如果复制构造函数S具有副作用,则规范不允许此转换.相反,它需要至少两个副本(一个来自t于a,一个来自a于返回值,另一个是返回值s,且只有最后一个可以省略.请注意,我写了= t上述表示的副本的事实的t到f的a,这仍然是在移动的副作用存在强制性的唯一拷贝/拷贝构造函数).
这是为什么?