【问题标题】:Overload return of a pointer with reference and pointer带有引用和指针的指针的重载返回
【发布时间】:2021-02-20 14:29:33
【问题描述】:

我得到以下代码:

 class myarray 
 {  

    float* rawdata;

    float*   GetRawData () const noexcept { return rawdata; };
    float&   GetRawData () const noexcept { return rawdata; };
    const float&   GetRawData () const noexcept { return rawdata; };


 } 

我收到编译器错误,提示无法重载前两个成员函数。 C++ 不可能区分,因为我们在引用中调用函数时会有不同的语法

【问题讨论】:

  • 正确,这是不可能的。
  • 任何decent book,课程或教程都应该提到它。
  • myarray x; x.GetRawData();时应该调用哪个函数?编译器无法决定。因此这是不允许的。
  • 因为我们在引用中调用函数时会有不同的语法 这不是真的。它们都可以通过写GetRawData() 来调用。我们对返回值的处理不是编译器在选择重载时考虑的。

标签: c++ pointers reference overloading


【解决方案1】:

C++就不能区分吗

事实并非如此。重载可以使用不同的参数列表,在成员函数的情况下,使用 ref/const 限定符。但不是通过返回值。您的重载具有相同的参数列表和 ref/const 限定符,因此它们不能相互重载。

因为我们在引用中调用函数时会有不同的语法

不,我们不会。两种情况下的调用是相同的:

this->GetRawData()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2015-02-13
    • 2017-04-25
    • 2021-11-28
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多