繁体   English   中英

为什么我应该使用const T&而不是const T或T&

[英]Why should I use const T& instead of const T or T&

我总是使用const T&将类传递给函数。 像这样:

void foo(const MyType& p)
{
  //...
}

但是现在我很困惑,为什么不将const TT&传递给函数呢?

顺便说一下,对于内置类型,例如intlong longdouble ,为什么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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM