为什么使用const作为值传递的参数?

时间:2013-09-14 00:56:19

标签: c++ const pass-by-reference pass-by-value

说你有:

int f( const T a ) { ... }
int g( const T &a ) { ... }

我理解在const中使用g:我们不知道a如何在函数外部使用,因此我们希望保护它不被修改。但是,我不理解在const中使用f,其中a是本地副本。为什么我们需要保护它不被修改?

3 个答案:

答案 0 :(得分:4)

我可以想到几个原因:

1)当有人阅读代码并查看const T a时,他们知道不应在函数正文中修改a

2)当您尝试修改函数体中的a时,编译器会告诉您。因此,添加const可以防止错误。

BTW克里斯已经在评论中提到了这一点。

3)然而,C ++ 11还有另一个不同之处。当移动操作修改对象时,无法移动常量对象。因此,您只能在函数体中复制a,并且不能从中移动。

4)另外,如果这是一个类类型,则不能在const对象上调用非const成员函数。

答案 1 :(得分:1)

“我个人倾向于不使用const,除了参考和指针参数。对于复制的对象,它并不重要” 如果在函数参数中使用const,则可能是以下原因之一。 1 - 它有助于编译器稍微优化一下。 2 - 未来没有人可以修改参数值(如果许多人在相同的代码库上工作)

答案 2 :(得分:0)

声明变量const是一种很好的做法。

<强> WHY吗

对于通过值传递给函数的参数,调用者无论是否声明它const都无关紧要。这里的基本原理是在编码时保护自己免受错误,使用编译器警告您正在更改变量的值,以便您可以通过删除const修饰符来明确确认此行为。这不仅适用于函数参数,也适用于局部变量。

基于这个基本原理,我个人总是首先声明所有变量const并让编译器在修改它们时发出错误。然后我检查是否有这种行为,如果确实需要,则删除const修饰符。为了更好的易读性,我也总是喜欢以我的变量全部为const的方式进行编码。