这是我的代码:
class A
{
public:
B* get_b() const;
const B* get_b() const;
};
这是非法的,因为2个重载方法只在返回类型中进行区分。但在语义上它们正是我想要的:两个函数都不应该修改A对象"在这些方法中#34;而第一个允许调用者修改对象""调用方法。
我看到2个解决方案: 1.从第一个方法中删除const,因为即使方法本身不修改对象,它也会返回一个非const数据,可以在以后修改。
你怎么看?
[UPDATE] 好吧,我想我应该删除第二个。原因是方法应该只关注自身(方法是否修改对象),不应该限制客户端使用数据的方式(如果数据可能被修改)。
答案 0 :(得分:1)
在C ++中,你不能通过返回类型重载函数 - 那就是它。考虑一个例子:
int GetValue();
float GetValue();
// Call it
GetValue(); // Which one?
您没有将返回值分配给任何值,或者在任何表达式中使用GetValue
,您(读者)无法确定将调用哪个函数。即使你指定:
double x = GetValue();
并且假设编译器可以基于返回类型推断,仍然存在歧义 - 要调用哪个函数,因为两者的返回值(int
和float
)可以转换为double
。简而言之,语言不允许基于返回类型的函数重载,而不管const
,指针或引用类型添加到返回类型。