关于我班上const方法的几个问题

时间:2015-07-06 17:49:09

标签: c++ const

我是新手使用C ++在我的公司编写企业软件,并且在成员函数中使用const对我来说非常困惑。例如,我有以下方法:

string DAC::impulse_find(int i)

变量i不会被修改。当我使用这三种将const添加到上述方法的变体时,我的代码编译得非常完美:

const string DAC::impulse_find(const int i) const

const string const DAC::impulse_find(const int i) const

string const DAC::impulse_find(const int i) const

那么这三者究竟有什么区别呢?我看了一些过去的答案并说“它适用于左边的任何东西”,但这仍然令人困惑。它是否适用于任何内容,例如类的名称?

2 个答案:

答案 0 :(得分:3)

之间没有区别
const std::string  
std::string const

const的顺序无关紧要,因为您没有处理指针。

将许多const作为限定符没有意义。您是否将编译器的警告级别调高到最大值?

编辑1:指针和常量
由于您要返回变量的副本,const的有效性毫无价值。由于您要返回副本,因此无法修改函数中的原始项目。

也许您对指针语法感到困惑,const的位置很重要:

string const * const -- constant pointer to a constant (read-only string).  Pointer cannot be modified.
string const *       -- Mutable pointer to a constant (read-only) string.  Pointer value can change.
string       * const -- Constant pointer to a read/write string.  Pointer value cannot be changed.
string       *       -- Mutable pointer to a read/write string.  Pointer value can be changed.  

只读数据的const可以放在类型之前或之后:

const string *  
string const *

以上两者都是等效的。

答案 1 :(得分:0)

所有三个版本

const string …
const string const …
string const …

相同

const的展示位置并不重要。第二个版本中的重复const是多余的,您的编译器应该发出警告。

此外,const在这里没有意义,因为字符串作为副本返回。返回const值不会带来任何结果(请参阅KABoissonneault的评论),只有引用或指针const才有意义作为返回类型。