2011-11-04 126 views
0

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

我有一个函数

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

这不会工作:

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

这解决了这个问题:

func(string&& s); 

是否有办法编写func以使其自动化在理论上与r值参考值和l值参考值一起工作?

+2

“这解决了这个问题”说实话,如果解决了这个问题,那看起来非常像编译器bug。 –

+1

这是一个简化的例子,是错误的,因为我没有理解这个问题...猫++的解释是正确的原因...我忘记了结果是字符数组,不是std :: string ... noobish错误:( – NoSenseEtAl

回答

3

Rvalues绑定到const左值refs没有问题。你的代码的问题在于类型。至少需要一个std::string用于重载运算符+。

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

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

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

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

相关问题