c++ - C++ 函数重载中的意外行为

标签 c++ overloading

考虑以下代码。

class MyClass1
{
public:
  MyClass1(const int& i)
  {
    myVar = i;
  }

  const int& get() const
  {
    std::cout<<"Inside 1 \n";
    return myVar;
  }

  int get()
  {
    std::cout<<"Inside 2 \n";
    return myVar;
  }

private:
    int myVar;
};

class MyClass2
{
public:
  MyClass2(const int& i)
  {
    myVar = i;
  }

  const int& get()
  {
    std::cout<<"Inside 3 \n";
    return myVar;
  }

  int get() const
  {
    std::cout<<"Inside 4 \n";
    return myVar;
  }

private:
    int myVar;
};


int main(int argc, char* argv[])
{

  MyClass1 myClass1(10);
  int tmp1 = myClass1.get();
  const int& tmp2 = myClass1.get();


  MyClass2 myClass2(10);
  int tmp3 = myClass2.get();
  const int& tmp4 = myClass2.get();

  return 0;
}

输出显示如下。

Inside 2 
Inside 2 
Inside 3 
Inside 3

对于“const int& tmp2 = myClass1.get();”我预计它会在 MyClass1 中打印调用“const int& get() const”。令我惊讶的是,它在 MyClass1 中的两种情况下都调用了“int get()”。 在MyClass2中,我交换了“const”,然后我发现在函数中调用它称为“const int& get()”。 为什么会出现这样的情况?

最佳答案

For "const int& tmp2 = myClass1.get();" I expected that it will print call "const int& get() const" in MyClass1.

你没有解释为什么你会这样期望,但你当然不应该这样做。有两个 get 函数不带参数,一个 const ,另一个不带参数。由于 myClass1 不是 const,因此调用不是 const 的函数。

如果不是这样,就没有必要允许两个具有相同名称并采用相同参数的类成员函数,只是一个是 const 而另一个不是。 t。

关于c++ - C++ 函数重载中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492009/

相关文章:

python - 最 'Pythonic'处理重载的方法

Java方法重载——歧义

c++ - 通过引用问题 C++

c++ - 使用 Boost.Units 定义百分比

c++ - OpenGL - 正确读取光标位置但无法从中画线

c++ - 在 VS2015 中访问 std::any

class - PowerShell中的构造函数链接-调用同一类中的其他构造函数

C++ 2011 : range-based loop unrolling?

c++ - 谷歌测试中的使用线程

c++ - 为什么我的重载 "+"运算符返回错误的总金额?