我是新手使用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
那么这三者究竟有什么区别呢?我看了一些过去的答案并说“它适用于左边的任何东西”,但这仍然令人困惑。它是否适用于任何内容,例如类的名称?
答案 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
才有意义作为返回类型。