Mat*_*att 5 c++ const const-correctness
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?
};
Run Code Online (Sandbox Code Playgroud)
Const可能会让人感到困惑.
所有这些ToString方法之间有什么区别?
如果我理解正确,第一个返回一个新的字符串对象,如果需要可以修改.第二个返回一个常量引用,也许它应该是字符串const和ToString().第三个可能是废话,因为引用总是不变的是正确的吗?
以为我会把旧的char*版本放在那里进行比较,因为我有返回对象指针的方法,我不确定它们是否应该是const.
我想我只是想了解const正确性的局限性和好处,以及如何预先确定某些东西是否应该是const以及如何正确地应用const,因为将const放在不同的位置会改变含义.
编辑:另外,我如何处理'...丢弃限定符'.这究竟意味着什么?
使用的位置const取决于该函数的目的。正如詹姆斯在他的评论中建议的那样(值得作为答案),放在const任何你可以的地方:
如果函数旨在修改其对象实例内的状态,请勿将其放在const签名的末尾。
如果函数打算修改其引用或指针参数之一,则不要添加const该参数。
如果应该修改指针或引用引用的变量,则不要添加const类型(记住,const适用于紧邻之前的定义部分)。
如果返回的引用/指针引用了不应由接收到的变量更改的变量,请放置const该类型。
如果不知道函数的用途,就不可能回答问题中给出的示例。我的倾向是使用string ToString() constand char* ToString() const,并且有非常明确的文档说明谁delete负责char*.
作为额外说明,const char*和char const*是相同的(指向不可修改字符的指针)。char* const另一方面,是指向可修改字符的不可修改指针。
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |