使用左值或右值参数选择函数声明

时间:2013-04-06 18:50:54

标签: c++ rvalue-reference lvalue

有没有办法删除所有函数的'plumb'版本,而无需将'hit'行更改为'fixed'?

是的,我的程序运行正常,但我想如果有办法从这个版本的所有函数中获取。

请注意,int在我的程序中不是int,而是可以是对象(例如container_reference<std::array<double,4>>)或引用(例如std::array<double,4> &)的类型别名

void func(int &&m) { cout << "rvalue: " << m << endl; }
void func(int  &m) { cout << "lvalue: "; func(std::move(m)); } // PLUMB!

int main() 
{
    int a = 5;
    func(a);    // HIT!
    func(std::move(a)); // FIXED!
    func(6);
    func(a + 5);
}

1 个答案:

答案 0 :(得分:5)

我很难理解你想要什么,但这可能是一个选择:

template<typename T>
void func(T &&m) {
  // ...
}

T&&被称为“通用引用”,因为它会因参考折叠规则而绑定到左值和右值。