小编Key*_*hsh的帖子

使用右值引用重载加法运算符作为左手操作数被认为是一种好习惯吗?

假设str是一个用于存储字符串值的类,它会使加法运算符重载以支持字符串连接.像这样:

str operator+(const str &a,const str &b);
Run Code Online (Sandbox Code Playgroud)

但问题是如果我们有这样的事情:

str s=str("Hel") + str("lo ") + str("Wor") + str("ld!");
Run Code Online (Sandbox Code Playgroud)

然后它将创建3个临时对象(因为我们在每次添加时都会得到一个新对象),这在此上下文中并不是真正需要的.这个问题的一个简单解决方案可能是重载一个新的加法运算符,该运算符接受一个rvalue-reference作为其左操作数,并在将该操作数与右操作数连接后将其返回为rvalue-reference.像这样的东西:

str &&operator+(str &&a,const str &b){
   a+=b;
   return std::move(a);
}
Run Code Online (Sandbox Code Playgroud)

通过重载此运算符,然后提到的语句将只创建一个临时对象,并且后续添加将仅连接到该临时对象.

我的问题是,这种方法是否是解决此问题的正确方法?

c++ operator-overloading rvalue-reference c++11

3
推荐指数
1
解决办法
438
查看次数