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 内,则适用相同的规则,调用哪个函数仍取决于传入的参数是文字、非常量变量还是常量变量。