簡體   English   中英

C ++函數重載中的意外行為

[英]Unexpected behaviour in C++ function 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()”。 為什么會這樣呢?

對於“ const int&tmp2 = myClass1.get();” 我希望它將在MyClass1中打印調用“ const int&get()const”。

您沒有解釋為什么會這樣,但是您當然不應該這樣做。 有兩個不帶參數的get函數,一個為const ,另一個為不帶參數。 由於myClass1不是const ,因此將調用非const

如果不是這樣,就不允許兩個具有相同名稱和采用相同參數的類成員函數僅因為一個是const而另一個不是而不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM