带有引用和指针的指针的重载返回
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()
【讨论】:
以上是关于带有引用和指针的指针的重载返回的主要内容,如果未能解决你的问题,请参考以下文章
C++基础2 引用 函数扩展: 默认值 占位符 指针 重载 类:引用类指针 声明实现分开写