有没有办法编写一个将l-val ref或r-val引用作为输入参数的函数?
问题描述:
动机:有没有办法编写一个将l-val ref或r-val引用作为输入参数的函数?
我有一个函数
func(const string& s);
{
//...
}
当然
这不会工作:
func("hello" + " " + "world");
这解决了这个问题:
func(string&& s);
是否有办法编写func以使其自动化在理论上与r值参考值和l值参考值一起工作?
答
Rvalues绑定到const左值refs没有问题。你的代码的问题在于类型。至少需要一个std::string
用于重载运算符+。
func(std::string("hello") + " " + "world");
答
是的。您可以使用模板的参考折叠行为:
template <typename S>
func (S && s)
{
//...
}
这保留了l值和r值以及常量。
“这解决了这个问题”说实话,如果解决了这个问题,那看起来非常像编译器bug。 –
这是一个简化的例子,是错误的,因为我没有理解这个问题...猫++的解释是正确的原因...我忘记了结果是字符数组,不是std :: string ... noobish错误:( – NoSenseEtAl