選擇假設我設計一個String類的自己,我想重載運算符[]的功能,這裏的選擇:我應該從下面的功能
String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;
常量的任何其他組合,非常量和引用返回類型。
選擇假設我設計一個String類的自己,我想重載運算符[]的功能,這裏的選擇:我應該從下面的功能
String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;
常量的任何其他組合,非常量和引用返回類型。
[]
string
的運算符返回一個字符,而不是字符串。根據具體情況,您應該實現其中一個或兩個:
const char& operator[] (size_t index) const;
char& operator[] (size_t index);
第一個產生的引用無法修改。如果你的字符串是不可變的,那就是你所需要的。
第二個產生一個可以修改的引用。你可以使用它來實現聰明的東西,比如修改拷貝和引用計數。
你應該有兩個。 – user1071136
@ user1071136如果你實現一個支持所有標準功能的字符串,那麼是的,你需要兩個。如果你想要一個不變的字符串,類似於Java,C#或Cocoa的'NSString'中的那個,那麼第一個運算符本身就足夠了。 – dasblinkenlight
只是一個側面的問題。對於性能來說,返回一個const char值而不是一個const引用會更好嗎?作爲指針是x4或x8的sizeof(char)。 – ablm
有些人更喜歡operator[]
的簽名參數類型,它們都更類似於內置運算符[](它們也支持負指數),並且還能夠檢測負值參數(如果您有一個越界檢查)。
的C++編譯器使用評估呼叫類型內置運營商[]爲ptrdiff_t
,所以你有時會發現以下
char &operator[](ptrdiff_t index);
char operator[](ptrdiff_t index) const;
我通常只使用普通的int
參數類型。
這次假設返回類型是大數據類型。所以函數會是這樣的:Type&operator [](int index);和Type運算符[](int index)const;所以我在想,最好是在第二個函數中返回大數據的參考?如果不是,那將是什麼原因。 –
爲什麼字符串的[]運算符會返回一個字符串? – Cubic
@Cubic有些語言消除了字符串/字符的區別,並使用單字符字符串而不是單獨的字符類型。儘管如此,這並不是一個好的理由。 – delnan