...在C ++ 0x中,这样的赋值运算符称为 a 统一 赋值运算符因为它不需要写两个 不同的任务操作员......
对于赋值运算符,它按值获取类的类型:
String & operator = (String s) // the pass-by-value parameter serves as a temporary
{
s.swap (*this); // Non-throwing swap
return *this;
}
我尝试使用谷歌搜索该术语,但它似乎没有得到广泛使用。
它来自哪里?
答案 0 :(得分:4)
似乎是在正式类型系统中引用的unification。我们的想法是,如果只通过某些合法的替换将r值和l值赋予相同的类型(统一),那么赋值就是格式良好的。
维基百科声称这个想法首先被John Alan Robinson给予了有意义的关注(可能还有它的名字)。
答案 1 :(得分:1)
我不确定是谁说的,但维基书是错的。单词"统一"在c ++ 0x"标准"中出现正好零次。 (你应该真的使用短语" C ++ 11"现在,它已于2011年8月获得批准。)
正确的术语是复制省略。从C ++ 0x(n3242,我可以得到的最后一笔钱,但没有掏钱),第12.8 Copying and moving class objects, /34
节:
当满足某些条件时,允许实现省略类对象的复制/移动构造,即使该对象的复制/移动构造函数和/或析构函数具有副作用。
在这种情况下,实现将省略的复制/移动操作的源和目标视为仅仅两种不同的引用同一对象的方式,并且该对象的销毁发生在两个对象的稍后时间如果没有优化就会被破坏。
在下列情况下(可以合并以消除多份副本),允许复制/移动操作的省略,称为复制省略 ... ...