返回无效的引用

mas*_*oud 8 c++

有时当我用C++编程时,我希望undefined每个变量都有一个像Javascript!的值.例如,当我为数组的越界元素返回一个值时,返回an undefined而不是抛出异常是有用的,或者:

template <typename T, int SIZE>
class MyArray
{
  T arr[SIZE];
  static T badref;
public:
  T &operator[](int i)
  {
    if (i >=0 && i < SIZE)
      return arr[i];
    else
      throw std::string("OUT-OF-BOUNDS"); // or: return badref; !!
  }
};
Run Code Online (Sandbox Code Playgroud)

另一个脏(在我看来)选项是将pre-defind变量的引用作为坏引用变量返回.我知道我们不能null为参考变量分配或类似的东西.

是否有另一个格式良好的模式返回一个引用,其中调用者能够找出返回的值无效?

编辑:我不是故意的pointer

Mir*_*toš 5

你可以在评论中提到使用boost :: optional作为@chris.它是Boost libary的一部分.有关详细信息,请参阅此页面.

修改MyArray类:

template <typename T, int SIZE>
class MyArray
{
  T arr[SIZE];
public:
  optional<T&> operator[](int i)
  {
    if (i >=0 && i < SIZE)
      return optional<T&>(arr[i]);
    else
      return optional<T&>();
  }
};
Run Code Online (Sandbox Code Playgroud)

用法:

MyArray<int>() array;
// fill array with data

optional<int&> result = array[0];
if (result) {
    // item was found
} else {
    // index out of bounds
}
Run Code Online (Sandbox Code Playgroud)