當函數返回的INT返回錯誤返回參考
int& MyClass::getElement(int position)
{
if (position < _size)
return (_array[position]);
return ([...]) // An Error
}
參考我首先想到的是返回NULL。 但顯然一個引用不能爲NULL。
在這種情況下返回錯誤的正確方法是什麼?
當函數返回的INT返回錯誤返回參考
int& MyClass::getElement(int position)
{
if (position < _size)
return (_array[position]);
return ([...]) // An Error
}
參考我首先想到的是返回NULL。 但顯然一個引用不能爲NULL。
在這種情況下返回錯誤的正確方法是什麼?
各種選擇,大致與我的優選選項排序第一:
std::out_of_range
std::pair<bool,int&>
或boost::optional<int&>
。如果你想通過值返回某些東西,而不是引用,那麼這會更有用,所以不能返回指針。如果您需要返回引用,則必須在發生錯誤時引發異常。
另一件需要考慮的事情是,即使你返回了一個'int'(即不是一個引用),NULL也會是0(所以很容易與一個有效的'0'值相混淆)。
如果你想堅持這個函數定義,那麼拋出一個異常來指示一個錯誤。
int& MyClass::getElement(int position)
{
if (position < _size)
return (_array[position]);
throw std::out_of_range("Invalid size to getElement");
}
'range_error'比'invalid_argument'更傳統。 –
(我的意思是'out_of_range',抱歉)。 –
正確的方法是在參數位置沒有可接受的值的情況下拋出std::out_of_range
類型的異常。
不涉及幻數的唯一方法是引發異常。 – juanchopanza
我同意當前的答案,但我想補充一點:一個例外是當你的功能不能堅持自己的接口。在這種情況下,接口承諾「如果你給我一個'int',我會給你另一個'int'回來。由於錯誤情況違反了該合同,這是一種特殊情況。 –
您還應該檢查否定索引,或使用無符號類型。 –