2012-01-14 108 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