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

A few questions about const methods in my class

本文关键字:几个问题 方法 const 于我课      更新时间:2023-10-16

我刚开始在公司使用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

那么这三者到底有什么区别呢?我看了一些过去的答案,然后说"它适用于任何向左的东西",但这仍然令人困惑。它是否也适用于任何东西,比如类的名称?

const std::string  
std::string const

const的顺序是无关的,因为你不是在处理指针。

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

编辑1:指针和Const
由于您返回的是一个变量的副本,因此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 *

三个版本

const string …
const string const …
string const …

const的位置在这里并不重要。第二个版本中重复的const是多余的,编译器应该给出一个警告。

此外,const s在这里没有意义,因为字符串作为拷贝返回。返回const值没有任何意义(参见KABoissonneault的注释),只有指向const引用或指针才有意义。