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是本地副本。为什么我们需要保护它不被修改?
我能想到几个原因:
1)当有人读取代码,看看const T a,他们知道这a不应该在函数体进行修改。
2) 当您尝试a在函数体中进行修改时,编译器会告诉您。因此,添加const可以防止错误。
顺便说一句,克里斯已经在评论中提到了这一点。
3)但是,C++11 中还有另一个区别。不能移动常量对象,因为移动操作会修改对象。因此,您只能a在函数体中进行复制,而不能从中移动。
4) 此外,如果这是一个类类型,则不能在 const 对象上调用非常量成员函数。