0
void setage(const int&a);
void setage(int&a);

这两个功能有什么区别?什么时候调用这个函数?

4

2 回答 2

5

给定重载集:

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&

注意,如果这个重载集写在一个类中,同样的规则适用,调用哪个函数仍然取决于传入的参数是文字、非常量变量还是常量变量。

于 2020-05-20T14:32:36.043 回答
1

constjust 表示函数不会改变值。通过引用传递时,通常首选通过常量引用传递,除非函数应该更改参数。

至于调用哪个函数,取决于变量类型。请参见下面的示例。

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引用。

于 2020-05-20T14:32:11.530 回答