C++中函数参数与(const int&)和(int&a)的区别

Nar*_*rek 8 c++ reference function argument-passing

我知道如果你编写void function_name(int&a),那么函数将不会对作为参数传递的变量进行本地复制.你还应该在文献中遇到你应该编写void function_name(const int&a)以便说编译器,我不希望复制传递给参数的变量.

所以我的问题是:这两种情况有什么不同(除了"const"确保传递的变量不会被函数改变!!!)???

Dav*_*eas 11

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 
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*ski 7

所以我的问题是:这两种情况的区别是什么(除了"const"表明变量传递不会被函数改变 !!!)???

就是区别.