給定的是一個C++類,它包含內部數據,該數據必須暴露在外部並且也應該是可修改的。獲取和設置內部數據:返回類型,出錯時的行爲
class Container {
public:
... get(int key) const;
... set(int key, int value);
private:
std::vector<int> m_values;
};
的問題是什麼返回類型get()
和set()
最好得到。對於get()
:
const int& get(key)
,引用const值。const int* get(key)
,指向const值的指針。
當使用該引用時,當給定的鍵不存在於容器中時,必須發生。例外?或只是訪問m_values
,讓它拋出?依靠assert
s?
指針返回類型可以返回nullptr
,指示無效操作。但是,這是不是意味着調用者通常會請求不在那裏的東西而做錯了一些事情?
對於set()
:
void set(key, value)
bool set(key, value)
的void
版本忽略無效鍵或值。再次說明:如果發生錯誤,該怎麼辦?
bool
版本在成功時返回true
,當密鑰和/或值無效時返回false
。此處與get()
相同:用戶在指定無效密鑰和/或值時可能做了錯誤處理。
您寧願讓應用程序崩潰以指示用戶使用它錯誤還是依賴用戶檢查結果返回值?
考慮到std :: vector已經有一個簡單的'get&set',它不會執行很多錯誤檢查..我會在你的Container中處理一些' – 2011-12-19 00:38:39
@parapurarajkumar'std :: vector'當然是唯一的一個例子,它並沒有像你說的那樣做很多的錯誤檢查,所以你(作爲用戶)必須檢查你對它的處理是否正確。這可能就是我在這裏問的問題。 – stschindler 2011-12-19 00:50:52
如果'key'不好,你是否考慮過拋出'std :: invalid_argument'? – moshbear 2011-12-19 00:52:28