非引用参数

问题描述

如果我有代码
void Foo(aBasicType aIn) //Where aBasicType is int,char etc.
{
    //...
}
既然它要被复制,将它设为
const aBasicType
有什么意义吗?我问的原因之一是因为我已经在第三方代码中看到它,并且想知道是否有我不知道的东西。     

解决方法

如果您知道函数在执行过程中不需要修改其值,则将其声明为“ 2”不会有任何伤害。 请注意,当参数按值传递时,更改其参数的函数应该很少见。 声明变量
const
可以阻止您编写
if (aIn = someValue)
。     ,我有时(不经常)这样做,因为当人们倾向于就地修改
aIn
而不是制作另一个副本时,但是该方法依赖于
aIn
始终保持不变。但是,这往往是一个接近的电话。     ,原因是信息性的:当在赋值的左侧看到值传递的参数时,您希望编译器警告/错误。 在lib上看到它有点麻烦,因为它们的读者可能不及C或C ++上的“消息灵通”(两种语言都相同)。     ,这将使该函数的值
const
,以与在函数顶部声明常量相同的方式可能有用。     ,不,将const添加到标量按值调用参数是没有意义的,只会造成混乱。     ,我更喜欢在输入参数中添加const限定符,而不考虑参数传递方法(按值,按指针还是按引用)。因此const参数只是表示\“输入参数\”,而非const参数表示\“输出参数\”(或者很少是inout参数)。我想这样的约定会使代码更易于理解,但是当然,这取决于口味。     ,我想我可以这样简单得多。当“ 8”不是模板参数时: 签名中的“ 9”是对呼叫者的保证 功能和功能实现者的约束。
const footype
只是对 实现者,与调用者无关。 当“ 8”是模板参数时,则只能针对各个模板实例测试规则。 顺便说一句,如果您看到const约束,则所连接的代码更容易阅读,因为代码可以执行的操作受到很大的限制。这是为什么C ++比C#或Java更易于阅读的众多原因之一。