常量类和函数

Constant class and function

本文关键字:函数 常量      更新时间:2023-10-16

我需要写一个新方法。给出了以下代码:

const Class * func() const;

但是,当类和函数都被声明为常量时,这意味着什么?

const Class * func() const;

const Class*是返回类型。它说这个函数返回一个指向const Class的指针。因此,无论谁调用这个函数,都会收到一个指针,但他们不能修改指针指向的对象

声明末尾的const表示,该成员函数不会修改被调用对象的状态。也就是说,它不会修改this指向的对象。事实上,如果您试图修改func中的任何数据成员(不是mutable(,编译器会通知您。

const Class * func() const;
^^^^^                ^^^^^
  1                    2
  • 第一个const表示返回类型为const Class*

  • 第二个意味着,方法func不会更改其类成员。

 

根据段落§9.4/1:

struct X {
   void g() const;
};

如果成员函数被声明为const,则this的类型为const X*

因此,您不能修改X的成员。

const Class * ...

这意味着func将向Class 返回一个const pointer

Class c;
Class* p = c.func()        // Not allowed.
const Class* p = c.func()  // OK.
p->mem = 2;                // Not allowed. p is a const pointer.

----------------------------------------------------------------------------------------------

func() const;
       ^^^^

意味着func不会修改this,或者换句话说,不会影响类的状态(不会修改任何成员变量。(。

void Class::func(int& i) const {
   this->mem = i;  // is not allowed here since func() is const (unless 'mem' is mutable)
   i = this->mem;  // This is OK.
}

这意味着没有任何变化!const表示事物是不变的

const Class-无法享受的乐趣

func() const;那个对象不能自己玩