`const`关键字在函数之后执行什么操作?

时间:2010-12-23 17:07:49

标签: c++ winapi visual-c++ class-design

  

可能重复:
  What is the meaning of a const at end of a member function?

我见过一些类似这样的课程。

void something() const;

const的含义是什么?

5 个答案:

答案 0 :(得分:5)

除了SRM所说的(该函数不能改变类的任何成员(这不完全正确,例如在mutable成员的情况下,仍然可以改变)),这意味着你可以在const的东西上调用这个成员函数。因此,如果您获得Foo const& foo作为参数,则只能在问题中调用声明为const的成员。

答案 1 :(得分:4)

这意味着something可能无法修改类的成员变量。 规则的例外是如果使用mutable关键字声明成员变量。

例如,假设您有一个std::map< int, int > var成员变量和一个执行以下操作的方法:

int Class::method () const {
    if (var.find (42) != var.end ()) {
        return var[42];
    }
    return 0;
}

由于var[42]修改了var,如果42不在容器中,那将无法编译。将var声明为mutable可以让您通过编译。

答案 2 :(得分:3)

这意味着该函数不会修改任何成员变量。更确切地说,这意味着该函数不能改变该类的任何非静态或不可变成员变量

答案 3 :(得分:1)

绝对精确 - 它使函数中的隐式this指针成为指向const对象的指针。

从9.2.1“这个指针”“

  

this的成员函数中class X的类型为X*。如果成员函数声明为const,则其类型为const X*,如果成员函数声明为volatile,则其类型为volatile X*,如果成员函数声明为const volatile,其类型为const volatile X*

所有其他行为(您无法修改对象成员,可以使用const对象调用该函数等)都不属于此。

答案 4 :(得分:0)

它声明此函数不能更改任何数据。使其成为只读功能。