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)
归档时间: |
|
查看次数: |
10646 次 |
最近记录: |