const成员函数 / 函数名后面加const(Const member functions in C++ / “const” at end of function declaration? )

class Foo 
{
public:
    int Bar(int random_arg) const
    {
        // code
    }
};

const在函数声明后用关键字表示的“常量函数”, 使该类函数更改class 的成员变量成为编译器错误。但是,在函数内部可以读取类变量,但是在该函数内部进行写入将产生编译器错误。

考虑这种“常量函数”的另一种方法是将类函数视为带有隐式this指针的普通函数。

因此,方法int Foo::Bar(int random_arg)(末尾没有const)会产生类似的函数int Foo_Bar(Foo* this, int random_arg),而类似的调用Foo f; f.Bar(4)将在内部与类似Foo f; Foo_Bar(&f, 4)

现在,在末尾int Foo::Bar(int random_arg) const 添加const 可以理解为带有const指针的声明:int Foo_Bar(const Foo* this, int random_arg)。由于this这种情况下的类型为const,因此无法修改成员变量。

可以放宽“常量函数”的限制,不允许函数写入类的任何变量。为了使某些变量即使在函数被标记为“ const function”时也可写,这些类变量被标记为mutable。因此,如果将类变量标记为可变的,并且“ const函数”写入此变量,则代码将干净地编译,并且该变量可能会更改。(C ++ 11)

通常,在处理const关键字时,更改C ++语句中const关键字的位置具有完全不同的含义。上面的用法const仅适用于在const括号后添加到函数声明的末尾。

constC#是C ++中过度使用的限定符:与指针结合使用时,语法和顺序通常并不简单。

 

参考文献:

C ++“ const”声明:为什么和如何:http://duramecho.com/ComputerInformation/WhyHowCppConst.html

常量正确性 :http://www.parashift.com/c++-faq-lite/const-correctness.html

发布了119 篇原创文章 · 获赞 152 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/weixin_40539125/article/details/102999673
今日推荐