获取和设置内部数据:返回类型,错误情况下的行为



给定是一个c++类,它保存内部数据,这些数据将被公开给外部,并且可以被修改。

class Container {
  public:
    ... get( int key ) const;
    ... set( int key, int value );
  private:
    std::vector<int> m_values;
};

问题是get()set()最好得到什么返回类型。对于get():

  1. const int& get( key ),参照const值
  2. const int* get( key ),指针指向const值

使用引用时,如果给定的键不存在于容器中,则必须发生某些操作。例外吗?或者只是访问m_values并让它抛出?依赖 asserts ?

指针返回类型可以返回nullptr,表示操作无效。然而,这是否意味着调用者通过请求不存在的东西而做了一些错误的事情?

For set():

  1. void set( key, value )
  2. bool set( key, value )

void版本忽略无效的键或值。再问一次:如果出现错误该怎么办?

bool版本成功时返回true,键和/或值无效时返回false。这里也与get()相同:用户可能在指定无效的键和/或值时做了错误的操作。

您是宁愿让应用程序以某种方式崩溃,以表明用户使用错误,还是依赖于用户检查结果返回值?

对于getter,我也会考虑按值返回。返回指针(呸)或引用限制了以后重新实现类内部的选项,除非您也愿意更改接口。

作为一个人为的例子,考虑:

class Person
{
public:
    // Returns height in metres
    const int &getHeight() const { return height; }
private:
    int height;  // Height in metres
};

现在在以后的日期,如果我们决定改变内部以毫米为单位存储高度会怎么样?我们不能这样做:

const int &getHeight() const { return height / 1000; }

至于setter,那么,失败时如何处理完全取决于你自己。

相关内容

最新更新