假设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)
通过重载此运算符,然后提到的语句将只创建一个临时对象,并且后续添加将仅连接到该临时对象.
我的问题是,这种方法是否是解决此问题的正确方法?