在函数签名中通过const值传递参数是否有任何好处(或相反的成本)?
所以:
void foo( size_t nValue )
{
// ...
VS
void foo( const size_t nValue )
{
// ...
我能想到这样做的唯一原因是确保参数未被修改为函数的一部分,尽管由于它尚未通过引用传递,因此在函数外部不会产生更广泛的影响。
答案 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成为清楚地表达意图的。