有时当我用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
你可以在评论中提到使用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)