动机:
我有一个功能
func(const string& s);
{
//...
}
当然这不会起作用:
func("hello" + " " + "world");
这解决了这个问题:
func(string&& s);
有没有办法编写func,以便它自动适用于r值ref和l-value refs?
答案 0 :(得分:3)
Rvalues绑定到const lvalue refs没有问题。代码的问题在于类型。
用于重载运算符+至少需要一个std::string
。
func(std::string("hello") + " " + "world");
答案 1 :(得分:1)
是。您可以使用模板的参考折叠行为:
template <typename S>
func (S && s)
{
//...
}
这保留了l值和r值以及常量。