C++常量函数

什么是常量函数

在类成员函数声明的参数列表后加上const关键字将函数声明为常量函数。

class A {
public:
	void f() const {
	    print("Hello!");
	}
}

注意:const关键字位于函数声明的返回类型前时不是常量函数,只是函数的返回值为常量。

const int f1() {...}	// 不是常量函数,函数的返回值为常量
int f2() const {...}	// 常量函数

常量函数的特性

常量函数只能读取外部数据而无法修改。当函数较为复杂时,如果希望避免函数对对象内容进行修改,就可以将这个函数定义为常量函数。

class B {
private:
    int n;
public:
    void f() const {
        n = 0;			// 错误:表达式必须是可修改的左值
    }
};

注意:

  • 常量函数可以修改在其内部定义的变量。
  • 常量函数内只能调用常量函数,不能调用非常量函数。
class C {
public:
    int f1() const {
        int n = 0;
        n = 1;			// 正确:常量函数可以修改在其内部定义的变量
        return n;
    }
    intf2() {
		return 2;
	}
	void f3() const {
		int a;
		a = f1();		// 正确
		a = f2();		// 错误:常量函数内不能调用非常量函数
	}
};

常量函数的调用规则

  • 非常量对象可以调用常量函数和非常量函数。
  • 常量对象可以调用常量函数,不可以调用非常量函数。

举例:

#include 
using namespace std;

class A {
public:
    void f1() { cout << "f1" << endl; }
    void f2() const { cout << "f2" << endl; }
};

int main() {
    A a;
    a.f1();
    a.f2();

	const A b;
	b.f1();		// 错误:对象含有与成员函数"A::f1"不兼容的类型限定符
	b.f2();

    return 0;
}

你可能感兴趣的:(c++,c++)