const用于非引用参数

时间:2011-05-25 13:44:13

标签: c++ const

如果我有这段代码:

void Foo(aBasicType aIn) //Where aBasicType is int, char etc.
{
    //...
}

是否有任何意义使它成为const aBasicType,因为它无论如何都会被复制?我问的原因之一是因为我在第三方代码中看到了它,并且想知道是否有我不知道的东西。

7 个答案:

答案 0 :(得分:11)

如果你知道你的函数在执行期间不需要修改它的值,那么声明它const就没什么坏处。

请注意,当参数按值传递时,更改其参数的函数应该很少。

声明变量const可能会阻止您撰写if (aIn = someValue)

答案 1 :(得分:1)

我有时(不经常)这样做,当有诱惑在原地修改aIn而不是制作另一个副本时,该方法依赖于aIn在整个过程中保持不变。它往往是一个接近的电话。

答案 2 :(得分:1)

原因是提供信息:您希望编译器在赋值左侧看到值传递参数时发出警告/错误。 在lib上可以看到它有点麻烦,其受众可能不如C或C ++上的“信息灵通”(两种语言都相同)。

答案 3 :(得分:0)

这将使该函数的值const,这可能有用,就像在函数顶部声明常量一样有用。

答案 4 :(得分:0)

不,将const添加到标量call-by-value参数是没有意义的,只会让人感到困惑。

答案 5 :(得分:0)

我更喜欢将const限定符添加到输入参数,而不管参数传递方法(按值,按指针或按引用)。所以const参数只是意味着“输入参数”而非const参数意味着“输出参数”(或者很少是inout参数)。我认为这样的约定使代码更容易理解,但当然是品味问题。

答案 6 :(得分:0)

我想我可以制定这个更简单的方法。当footype不是模板参数时:

    签名中的
  • const footype &是来电者的保证 功能的实现者的功能和约束。

  • 另一方面,
  • const footype只是一个约束 实施者与呼叫者无关。

footype是模板参数时,只能针对各个模板实例来测试规则。

顺便说一下,如果你看到const约束,那么连接代码就更容易阅读,因为代码可以做的事情的可能性受到很大限制。这是C ++比C#或Java更容易阅读的众多原因之一。