为什么使用const的方法而不是没有const的第一个方法

时间:2018-01-23 13:46:23

标签: c++ function methods const overload-resolution

void print( int & a ){ cout << a << endl; }
void print( const int & a ){ cout << 2*a << endl; }
void print( float a ){ cout << 3*a << endl; }

为什么2print(1)的输出?

2 个答案:

答案 0 :(得分:7)

这个问题的原则是,您需要知道匿名临时工具不能绑定到非const引用,并且可以绑定到const引用。

1是int类型的匿名临时用户。

因此,重载解析会优先考虑const int&绑定。

某些编译器(较旧的MSVC)会错误地允许绑定到int&。在标准C ++中,如果缺少const int&重载,则会调用float重载。

答案 1 :(得分:1)

对于所有三个重载:

  1. void print( int & a ){ cout << a << endl; })未调用第一个重载,因为它只接受变量。 (除非你有一个旧的MSVC编译器)。
  2. void print( const int & a ))第二个重载类型为const int&,它可以接受int类型的临时类型或int类型的变量。
  3. void print( float a ))第三个重载有一个float类型的参数,如果没有int类型的重载,它将被调用。
  4. 因此,由于存在接受int类型的临时变量的重载,因此选择第二个重载超过第三个。