是否使用T const&或T &&

Sal*_*gat 6 c++ rvalue c++11 universal-reference

我很好奇,一般来说,你是否要使用T &&(通用引用)而不是经典的T const&(l值引用)来模拟以C++ 11开头的模板化函数参数.我特别好奇的是,如果你想要处理r值引用,你如何绕过这个事实,你被迫失去const; 有没有解决的办法?

Bri*_*ian 8

"失去const"没有问题.T如果参数是cv-qualified,将使用cv-qualifiers推导出.例如,如果参数是类型的右值const std::string,T则将推导为const std::string.通过使用转发引用,您不可能违反const-correctness.如果可以,那将是一个主要的语言缺陷.

至于何时应该使用转发引用这一更广泛的问题,请参见此处:正确使用通用引用

  • @Salgat如果你想编写一个永远不会修改它的参数的函数,那么你最好坚持使用`T const&`.当您想要移出传入的值或类似的东西时,转发引用很有用. (3认同)