如果我有这段代码:
void Foo(aBasicType aIn) //Where aBasicType is int, char etc.
{
//...
}
是否有任何意义使它成为const aBasicType
,因为它无论如何都会被复制?我问的原因之一是因为我在第三方代码中看到了它,并且想知道是否有我不知道的东西。
答案 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
是模板参数时,只能针对各个模板实例来测试规则。