假设你有:
int f( const T a ) { ... }
int g( const T &a ) { ... }
我了解const
in的使用g
:我们不知道a
在函数之外如何使用,所以我们希望保护它不被修改。但是我不明白 in 的用法,const
本地副本在f
哪里。a
为什么我们需要保护它不被修改?
假设你有:
int f( const T a ) { ... }
int g( const T &a ) { ... }
我了解const
in的使用g
:我们不知道a
在函数之外如何使用,所以我们希望保护它不被修改。但是我不明白 in 的用法,const
本地副本在f
哪里。a
为什么我们需要保护它不被修改?
我能想到几个原因:
1)当有人阅读代码并看到const T a
时,他们知道不a
应该在函数体中修改。
2) 当您尝试a
在函数体中进行修改时,编译器会告诉您。因此,添加const
可以防止错误。
顺便说一句,克里斯已经在评论中提到了这一点。
3)但是,C++11 中还有另一个区别。不能从常量对象中移动,因为移动操作会修改对象。因此,您只能a
在函数体中制作副本,而不能从中移动。
4) 此外,如果这是类类型,则不能在 const 对象上调用非 const 成员函数。
"I personally tend to not use const except for reference and pointer parameters. For copied objects it doesn't really matter" If you are using const in function argument there may be one of the following reason. 1-it help the compiler to optimize things a bit. 2-no body can modified argument value in future(if many people working on same code base)
声明变量 const 是一种很好的做法。
为什么?
对于按值传递给函数的参数,调用者是否声明它const
并不重要。这里的基本原理是在编码时保护自己免受错误的影响,使用编译器警告您正在更改变量的值,以便您可以通过删除const
修饰符来明确确认此行为。这不仅适用于函数参数,也适用于局部变量。
基于这个理由,我个人总是从声明所有变量开始,const
并让编译器在我修改它们时发出错误。然后我检查这种行为是否是有意的,const
如果确实需要,则删除修饰符。为了更好的易读性,我也总是喜欢以我的变量都是const
.