const引用和引用的区别
Difference between const reference and reference
void setage(const int&a);
void setage(int&a);
这两个函数有什么区别?
这个函数什么时候调用?
const
只是表示函数不会改变这个值。通过引用传递时,通常首选通过常量引用传递,除非函数应该更改参数。
调用哪个函数取决于变量类型。请参阅下面的示例。
int a( const int &b ) { return b; }
int a( int &b ) { return ++b; }
int main() {
int x = 2;
a( x ); // calls a( int & b )
a( 5 ); // calls a( const int &b )
const int y = 7;
a( y ); // calls a( const int &b )
}
注意文字值(如上例中的5
)不能绑定到非const
引用。
给定超载集:
void setage(int&a) { std::cout << "&"; }
void setage(const int&a) { std::cout << "&c"; }
第一个函数被调用仅使用非常量变量:
int a = 42;
setage(a); // prints &
如果您向第二个函数传递一个 const 变量,或者如果您向它传递一个文字值,则会调用第二个函数:
int const b = 42;
setage(b); // prints c&
setage(42); // prints c&
请注意,如果此重载集写在 class 内,则适用相同的规则,调用哪个函数仍取决于传入的参数是文字、非常量变量还是常量变量。
void setage(const int&a);
void setage(int&a);
这两个函数有什么区别? 这个函数什么时候调用?
const
只是表示函数不会改变这个值。通过引用传递时,通常首选通过常量引用传递,除非函数应该更改参数。
调用哪个函数取决于变量类型。请参阅下面的示例。
int a( const int &b ) { return b; }
int a( int &b ) { return ++b; }
int main() {
int x = 2;
a( x ); // calls a( int & b )
a( 5 ); // calls a( const int &b )
const int y = 7;
a( y ); // calls a( const int &b )
}
注意文字值(如上例中的5
)不能绑定到非const
引用。
给定超载集:
void setage(int&a) { std::cout << "&"; }
void setage(const int&a) { std::cout << "&c"; }
第一个函数被调用仅使用非常量变量:
int a = 42;
setage(a); // prints &
如果您向第二个函数传递一个 const 变量,或者如果您向它传递一个文字值,则会调用第二个函数:
int const b = 42;
setage(b); // prints c&
setage(42); // prints c&
请注意,如果此重载集写在 class 内,则适用相同的规则,调用哪个函数仍取决于传入的参数是文字、非常量变量还是常量变量。