
例如,某个函数的声明如下:
voID fun (const string &str);
该函数釆用了一个字符串对象的引用作为形参,但不能修改该对象。有一个类似的机制,可以用来保护隐含的形参 *this,使它不会被成员函数修改。当定义成员函数时,可以在形参列表后面放置 const 关键字,这实际上就是告诉编译器,该成员函数未被允许修改其对象。如果成员函数定义在类外面,则类内的声明和类外的定义都必须具有 const,示例如下:class ConstExample{ int x; public: ConstExample(int a){ x = a;} voID setValue(int); int getValue() const;};getValue 函数定义语句应如下:int ConstExample::getValue() const{ return x;}具有常量形参 X 的函数无法转向,并将 X 作为非常量形参传递给另一个函数。换句话说,承诺不修改 X 的函数不能将X传递给另一个函数,除非第二个函数也承诺不修改 X。这种情况有时也可能会以不明显的方式发生。以下程序使用带有常量形参的函数来打印数组的第一个元素,但是它不会编译,因为它在 const 的使用方面不一致:
#include <iostream>using namespace std;class K{ public: voID output () // 丢矢了 const { cout << "Output of a K object" << endl; }};voID outputFirst(const K arr[]){ arr[0] .output ();}int main(int argc,char** argv){ K arr [] = { K() }; outputFirst(arr); return 0;}该程序之所以不能编译,是因为编译器不能保证 const 数组的元素在作为隐含的 this 形参传递给 output 成员函数时不会被修改:arr[0].output();
要让该程序可以编译,则可以使 output() 成员函数变成一个 const 成员函数,以表示它有一个作为常量的 this 形参,示例如下:class K{ public: voID output() const { cout << "Output of a K object" << endl; }}; 总结 以上是内存溢出为你收集整理的C++常量成员函数全部内容,希望文章能够帮你解决C++常量成员函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)