【发布时间】: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