![](/img/trans.png)
[英]Should I always use `T&&` instead of `const T&` or `T&` to bind to a callback function?
[英]Why should I use const T& instead of const T or T&
我总是使用const T&
将类传递给函数。 像这样:
void foo(const MyType& p)
{
//...
}
但是现在我很困惑,为什么不将const T
或T&
传递给函数呢?
顺便说一下,对于内置类型,例如int
, long long
, double
,为什么const T
优于const T&
(我记得我已经阅读了有效的C ++ )
谢谢回答我的问题。
您可以传递三个值( const T,T&或const T& )中的任何一个。 它们都有不同的含义。 由您决定是否要传递无法修改的对象的副本,对对象的非const引用或对对象的const引用。 您选择什么取决于代码的语义。 总体而言,您可能希望选择const T&
不是const T
,以避免不必将值从调用方复制到此函数(节省时间和内存)。 此外(根据此有用的链接 ),每当要避免更改传递的引用的值或状态时,都希望使用const T&
over T&
。 这样可以防止愚蠢且被忽略的编码错误,例如出于测试目的而更改字段。
有关将常量基础类型的引用作为参数传递的问题,请参见: C ++和QT4.5-是否正在传递const int&overkill? 通过引用是否有助于信号/插槽?
(我记得我已经阅读了有效的C ++)
不,您不会,因为Scott Meyers不会犯这样的错误。
const T&
是最佳选择,因为它从不涉及副本,但仍可以使用右值。 考虑
void foo(int& p);
void foo(const std::string s);
int main() {
foo(1); // illegal!
foo("A reaaaaaaaallllllllllllllllllllllllllllllllllllllllllly long string");
// Nasty copy
}
如果您需要一个项目的副本,请在参数列表中创建一个(按值获取),但是没有理由将该值设为const
。 否则,请使用const T&
。 对于某些便宜的类型,毫无意义的是不花钱,因为您事先知道复制很便宜。
您始终通过const引用传递的规则过于笼统。
通过const引用传递通常表示
如果您需要其他内容,则应选择除通过const引用传递以外的其他内容。
const T通过值传递(需要复制),这对于一个类来说可能太多了,而对于内置类型应该没问题。
T&是通过引用传递的,可以在函数中进行修改,而const T&则不能,因此它取决于您需要执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.