有没有办法编写一个函数,将l-val ref或r-val引用作为输入参数?

时间:2011-11-04 18:41:16

标签: c++ c++11 rvalue-reference

动机:

我有一个功能

func(const string& s);
{
    //...
}

当然这不会起作用:

func("hello" + " " + "world");

这解决了这个问题:

func(string&& s);

有没有办法编写func,以便它自动适用于r值ref和l-value refs?

2 个答案:

答案 0 :(得分:3)

Rvalues绑定到const lvalue refs没有问题。代码的问题在于类型。

用于重载运算符+至少需要一个std::string

func(std::string("hello") + " " + "world");

答案 1 :(得分:1)

是。您可以使用模板的参考折叠行为:

template <typename S>
func (S && s)
{
    //...
}

这保留了l值和r值以及常量。