为什么将 const 用于按值传递的参数?

usu*_* me 6 c++ constants pass-by-reference pass-by-value

说你有:

int f( const T a ) { ... }
int g( const T &a ) { ... }
Run Code Online (Sandbox Code Playgroud)

我理解constin的用法g:我们不知道a函数外是如何使用的,所以我们想保护它不被修改。但是我不明白constin的使用f,哪里a是本地副本。为什么我们需要保护它不被修改?

Jes*_*ood 6

我能想到几个原因:

1)当有人读取代码,看看const T a,他们知道a不应该在函数体进行修改。

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

顺便说一句,克里斯已经在评论中提到了这一点。

3)但是,C++11 中还有另一个区别。不能移动常量对象,因为移动操作会修改对象。因此,您只能a在函数体中进行复制,而不能从中移动。

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