2012-01-14 114 views
0

我一直在問一類我以重載[]和返回兩個常量和非const的字符:過載返回一個常量元素

char * data_; 
char & operator [] (size_t index); 
const char & operator [] (size_t index) const; 

我有相同的實現編譯,但我很確定我在這裏丟失了一些東西:

const char & Array::operator [] (size_t index) const 
{ 
    return data_[index]; // todo: needs to be const? 
} 

如何確保返回的字符不可修改?

+0

請原諒這個奇怪的私人命名和它不使用模板的事實,我不能更改標題:) – JoeB 2012-01-14 18:30:33

+0

這個命名並不奇怪。這是很常見的,事實上,這是我使用的。 – 2012-01-14 18:32:18

+2

你的實現是正確的,返回類型的const確保返回的值是const。 – 2012-01-14 18:32:37

回答

2

如何確保返回的字符不可修改?

在返回類型的constconst char&,確保了字符不是經由返回參考修改。


然而,注意,這可能是優選的以返回char代替(即,通過char值,而不是一個參照本發明的const char)。當你有一個大對象時(因爲你可以避免在許多情況下複製大量字節)或者在泛型代碼中(因爲你不知道所有可能出現的類型的大小),所以返回一個const引用是很有用的,但是當返回已知很小的東西(東西不會小於char)時,您可以按值返回它。

+0

我明白了。所以在我的情況下,實現是一樣的,但一旦這成爲一個模板類(肯定會在學期後發生)實現會改變? – JoeB 2012-01-14 18:36:58

+0

在這種情況下,OP可能需要返回'[]'的引用,以便返回的值可以用作'l值',這將允許它出現在賦值的左側。 – 2012-01-14 18:40:07

+0

小心把它貼在答案上?我假設你的意思是我必須以某種方式返回一個參考? (根據評論在這裏http://stackoverflow.com/questions/6111905/c-is-return-value-a-l-value) – JoeB 2012-01-14 18:43:02