带有引用和指针的指针的重载返回

Posted

技术标签:

【中文标题】带有引用和指针的指针的重载返回【英文标题】: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() 来调用。我们对返回值的处理不是编译器在选择重载时考虑的。 【参考方案1】:

C++就不能区分吗

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

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

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

this->GetRawData()

【讨论】:

以上是关于带有引用和指针的指针的重载返回的主要内容,如果未能解决你的问题,请参考以下文章

重载 bool 转换和取消引用对象指针

C++基础2 引用 函数扩展: 默认值 占位符 指针 重载 类:引用类指针 声明实现分开写

C|指针的10种经典应用场合

<未解析的重载函数类型> 带有成员函数指针和模板

C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用

指向引用的指针获取器