函数后面加constant是什么意思呀见到这么一个面试题:class Foo{int fun() constant;}我从来没见过函数后面还加constant的,一个变量加constant表示变量不可更改,函数加constant是什么意思呢?代码不可更

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/21 11:37:04
函数后面加constant是什么意思呀见到这么一个面试题:classFoo{intfun()constant;}我从来没见过函数后面还加constant的,一个变量加constant表示变量不可更改,

函数后面加constant是什么意思呀见到这么一个面试题:class Foo{int fun() constant;}我从来没见过函数后面还加constant的,一个变量加constant表示变量不可更改,函数加constant是什么意思呢?代码不可更
函数后面加constant是什么意思呀
见到这么一个面试题:
class Foo
{
int fun() constant;
}
我从来没见过函数后面还加constant的,
一个变量加constant表示变量不可更改,函数加constant是什么意思呢?代码不可更改?

函数后面加constant是什么意思呀见到这么一个面试题:class Foo{int fun() constant;}我从来没见过函数后面还加constant的,一个变量加constant表示变量不可更改,函数加constant是什么意思呢?代码不可更
首先,是加const不是constant.
函数后面加const是表明这个函数不会更改class的状态,即class内各成员变量的值.编译器如果发现某个const函数里改变了成员变量的值会报错.比如下面这个例子.
struct A {
int i;
void set(int v) {i = v;} //不能加const,因为i值改变了.
int value() const {return i;} //正确,i值没有改变.
int value2() const {return i++;} //错误,因为i值改变了.必须将const去掉.
};
如果函数比较复杂时,比如并不直接改变某个值,但是调用了其它函数,编译器怎么判断函数是否const呢.可以看下面的例子.
struct B {
A a; //B里包含一个A类成员.
int func1() const {return a.value();} //正确,所调用的a.value()也是一个const函数.
int func2() const {return a.value2();} //错误,a.value2()不是const函数.
};
也就是说,在const函数里只能调用成员的const函数以保证成员状态不会改变.
所以,在设计类的函数里,区别const和非const函数并标记出来是个好习惯,既保证自己不会对类误操作,也可以明示别人调用你的类里哪些会改变类状态.