const关键字在C ++函数原型中意味着什么?

时间:2012-08-23 18:47:19

标签: c++ const

  

可能重复:
  What does const mean following a function/method signature?

我在C ++(特别是Boost)的后期阅读中遇到了很多函数,这些函数有一个我以前从未见过的符号。例如:

virtual void B() const;

你可以看到我们在函数名后面有一个const!我已经看到const关键字主要是关于它们在函数中使用的函数返回值(或作为参数),但是这个是不同的。 任何人都可以向我解释它是什么以及为什么我们使用它?还有什么不同于常规使用const函数?

int * const Function(int *const constantPointerToAnInteger, char const* pointerToAConstantChar);

3 个答案:

答案 0 :(得分:15)

当你有一个const对象时,只能调用标记为const的成员函数。例如

struct Silly {
    void say_hi();
    void say_bye() const;
};

// ...

Silly const s;
s.say_hi(); // illegal
s.say_bye(); // legal

此外,const成员函数也不能修改对象的任何成员变量(除非成员变量被声明为可变的。)例如。

struct Silly {
    int x;
    mutable int y;
    void do_stuff() const { x = 0; } // illegal - labelled const
    void do_other_stuff() const { y = 0; } // fine - y is mutable
};

答案 1 :(得分:5)

这是一个承诺(强制执行),该功能不会改变该类的任何成员。没有它,你只能为非const对象调用它。

答案 2 :(得分:3)

它禁止该方法更改类成员变量。

一个好的规则是将一个方法声明为const,当它应该是const(es.getters)时,至少有两个原因:

  • 文档目的:它立即显示调用该方法可以安全提供
  • 安全:防止错误

无论如何,方法的常量可以通过两种方式绕过:

  • const_cast :删除对象的常量
  • mutable 字段:允许修改特定成员,即使是const方法也是如此。