通过const副本传递

时间:2012-03-23 18:33:32

标签: c++

在函数签名中通过const值传递参数是否有任何好处(或相反的成本)?

所以:

void foo( size_t nValue )
{
    // ...

VS

void foo( const size_t nValue )
{
    // ...

我能想到这样做的唯一原因是确保参数未被修改为函数的一部分,尽管由于它尚未通过引用传递,因此在函数外部不会产生更广泛的影响。

5 个答案:

答案 0 :(得分:4)

此处的顶级const仅影响函数的定义,并且只会阻止您修改函数中nValue的值。

顶级const不会影响函数声明。以下两个声明完全相同:

void foo(size_t nValue);
void foo(const size_t nValue);

答案 1 :(得分:4)

当然有。您无法在函数内修改nValue

const一样 - 一般来说,它不是一种安全措施,因为你可以把它丢掉,但设计很重要。

您明确告诉其他程序员看到您的代码 -

  

“我不会在此功能中修改nValue

以及维护或更改代码的程序员

  

“如果你想修改nValue,你可能做错了。你不应该这样做。”

答案 2 :(得分:0)

使用const还可以确保您不会错误地尝试更改函数内部参数的值,无论参数是否可修改。

答案 3 :(得分:0)

如果定义输入参数const,则只需调用该对象上的const函数。

无论如何,如果您尝试意外更改该对象,您将收到编译器错误。

答案 4 :(得分:0)

我最近决定这样做。我喜欢将其作为与const &const *参数的一致性。 const正确性让生活更美好,为什么不全力以赴呢?如果你知道你不会改变这个值,为什么不把它变成const?使const成为清楚地表达意图的。