我知道如果你写 void function_name(int& a),那么函数将不会对作为参数传递的变量进行本地复制。在文献中也遇到过你应该写 void function_name(const int & a) 以便编译器说我不希望作为参数传递的变量被复制。
所以我的问题是:这两种情况有什么区别(除了“const”确保传递的变量不会被函数更改!!!)???
最佳答案
当你不需要写的时候,你应该在签名中使用const
。将 const
添加到签名有两个作用:它告诉编译器您希望它检查并保证您不会在函数内部更改该参数。第二个效果是使外部代码能够使用您的函数传递对象,这些对象本身是常量(和临时对象),从而可以更多地使用同一函数。
同时,const
关键字是您的函数/方法文档的重要组成部分:函数签名明确说明了您打算对参数做什么,以及它是否是将属于另一个对象的不变量的对象传递到您的函数中是安全的:您是明确的,因为您不会弄乱他们的对象。
使用 const
在您的代码(函数)中强制执行一组更严格的要求:您不能修改对象,但同时对调用者的限制更少,使您的代码更可重用.
void printr( int & i ) { std::cout << i << std::endl; }
void printcr( const int & i ) { std::cout << i << std::endl; }
int main() {
int x = 10;
const int y = 15;
printr( x );
//printr( y ); // passing y as non-const reference discards qualifiers
//printr( 5 ); // cannot bind a non-const reference to a temporary
printcr( x ); printcr( y ); printcr( 5 ); // all valid
}
关于c++ - C++ 中函数参数作为 (const int &) 和 (int & a) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727402/