const正确性让我有些困惑。在C++中使用const的正确方法是什么?
你用什么经验法则来决定何时应该是const或不是?
例如考虑这个例子
class MyClass
{
string ToString(); // this one?
const string& ToString(); // or this?
const string& ToString() const; // or this?
char* ToString(); // What about this?
const char* ToString(); // or this?
const char* ToString() const; // or this?
const char const* ToString(); // Is this legal?
const char const* ToString() const; // how about this?
char const* ToString(); // or even this?
};
Const会变得非常混乱。
所有这些ToString方法之间有什么区别?
如果我理解正确,第一个返回一个新的字符串对象,如果需要可以修改 。 第二个返回一个常量引用,也许它应该是字符串const & ToString()。 第三个可能是废话,因为引用总是不变的是正确的?
以为我会抛出旧char *版本在那里比较,因为我有方法返回对象指针,我不知道它们是否应该是const或不。
我想我只是想了解const的正确性的限制和好处,以及如何确定某些东西是否应该是const,以及如何正确应用const,因为将const放在不同的地方会改变含义。
编辑:另外,我该如何处理'...丢弃限定符'。这实际上意味着什么?
第二个和第三个之间没有什么区别。 – dan04 2010-10-14 23:51:31
我宁愿从一般规则开始,“如果你可以把const放在某个地方,那么你应该。”很显然,这个规则有很多例外(其中很多),但实际上,你可以使const变量越多,推断,调试和维护代码就越容易。我认为这比起更常见的“让我们只在必要的地方使用常量,并且可能在其他地方使用常常更好”。 – 2010-10-14 23:51:42
您是否阅读过Herb Sutter的GOTW文章[“Const Correctness?”](http://www.gotw.ca/gotw/006.htm)它通过一个示例类来解释(1)应该是什么'const' (2)使用'const'的效果是什么。这绝对是一个很好的起点。 – 2010-10-15 00:02:50