命名重载的getter方法:const和non-const

时间:2014-11-10 13:44:07

标签: c++

这是我的代码:

class A
{
  public:
    B* get_b() const;

    const B* get_b() const;
};

这是非法的,因为2个重载方法只在返回类型中进行区分。但在语义上它们正是我想要的:两个函数都不应该修改A对象"在这些方法中#34;而第一个允许调用者修改对象""调用方法。

我看到2个解决方案: 1.从第一个方法中删除const,因为即使方法本身不修改对象,它也会返回一个非const数据,可以在以后修改。

  1. 以不同方式命名方法
  2. 你怎么看?

    [UPDATE] 好吧,我想我应该删除第二个。原因是方法应该只关注自身(方法是否修改对象),不应该限制客户端使用数据的方式(如果数据可能被修改)。

1 个答案:

答案 0 :(得分:1)

在C ++中,你不能通过返回类型重载函数 - 那就是它。考虑一个例子:

int GetValue();
float GetValue();

// Call it
GetValue(); // Which one?

您没有将返回值分配给任何值,或者在任何表达式中使用GetValue,您(读者)无法确定将调用哪个函数。即使你指定:

double x = GetValue();

并且假设编译器可以基于返回类型推断,仍然存在歧义 - 要调用哪个函数,因为两者的返回值(intfloat)可以转换为double。简而言之,语言不允许基于返回类型的函数重载,而不管const,指针或引用类型添加到返回类型。