见到这么一个面试题:

class Foo
{
int fun() constant;
}
我从来没见过函数后面还加constant的,这表示什么意思呢?请高手帮我解答,谢谢了
一个变量加constant表示变量不可更改,函数加constant是什么意思呢?代码不可更改?说不通呀??

慕无忌1623718
浏览 87回答 2
2回答

小怪兽爱吃肉

使用CONST说明的成员函数,称为常成员函数。只有常成员函数才有权使用常量或常对象,没有使用的CONST说明的成员不能使用常对象。const成员函数和const对象实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为:const int i=1 ;同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为:const classA a(2);这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象寿命期内不能改变。但是,如何保证该类的数据成员不被改变呢?为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。调用规则对象 成员函数 对/错5、 const const 对6、 const non-const 错7、 non-const const 对8、 non-const non-const 对 

尚方宝剑之说

首先,是加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函数并标记出来是个好习惯,既保证自己不会对类误操作,也可以明示别人调用你的类里哪些会改变类状态。
打开App,查看更多内容
随时随地看视频慕课网APP