【发布时间】:2024-04-14 06:10:02
【问题描述】:
我正在阅读这本书,名为“Effective C++ Third Edition 55 Specific Ways to Improvement”,在阅读时我遇到了 constness 的主题,我不明白重载和重载之间的区别const operator[] 具有 bitwise 和 member function constness,
const char operator[](size_t t)
const{
return text[t];
}
,以及重载的非常量 [],它不必对常量做任何事情
char operator[](size_t t)
{
return text[t];
}
我尝试过使用和不使用 const 和 non-const 重载[] 进行一些操作,但仍然没有看到区别,这仅用于使代码可读吗?或者如果有什么不同,那是什么?
这是我的字符串类
class String
{
int len = 0;
char text[];
public :
String( const char c[])
{
strcpy(text , c);
len = strlen(text);
}
int length();
const char operator[](size_t t)
const{
return text[t];
}
char operator[](size_t t)
{
return text[t];
}
};
【问题讨论】:
-
char text[];不是有效成员。 (那本书不是初学者的书;它“旨在成为 C++ 程序员应该阅读的最好的第二本书”。) -
显示您尝试过的操作。如果他们没有在
const实例上完成,那一点也不重要。但是如果你忽略了const重载并尝试在const String上调用operator[],你会发现它无法编译。然后,一旦添加了它,const对象的访问器应该/必须返回包含数据的const版本是合乎逻辑的。这是基本的初学者级别的东西,不值得提问。如果您还不知道某物是什么,那么请不要使用它。但是您可能很快就会发现const的许多要点是什么(基本和良好实践)。 -
这本书实际上并不包含(无用的)
const char operator[]。它包含一个const char& operator[]。如果你不明白为什么一个const没有用而另一个没有,或者为什么有&,你可能需要阅读另一本C++ 书籍。 -
如果你想要一本好书:The Definitive C++ Book Guide and List
标签: c++ constants bit-manipulation overloading