有时,当我用C++编程时,我希望每个变量都有一个undefined
的值,比如Javascript !. 例如,当我再次回到了阵外的界限元素的值,它是有用的返回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; !!
}
};
另一个肮脏的(在我看来)选项将返回一个预定义变量的引用作为不良引用变量。我知道我们不能将null
或类似的东西分配给参考变量。
是否有另一个格式良好的模式返回引用,其中调用者有能力找出返回的值是无效的?
编辑:我不是指pointer
是的,它被称为指针。或者,'boost :: optional'。 – chris
至少让你的badref对象静态,那么它不会占用你创建的每个MyArray的空间。但我同意,这很丑陋。在这样的泛型代码中,我宁愿抛出异常 – john
@john:是的,我编辑了它。 – deepmax