一个函数名后面加const表示什么意思?? const(一):(转) 一个函数名后面加const表示什么...

C++\u4e2d\u51fd\u6570\u540d\u540e\u8ddf\u4e2aconst\u8868\u793a\u4ec0\u4e48\u610f\u601d\uff1f

\u5728\u6210\u5458\u51fd\u6570\u4e2d\u5706\u62ec\u53f7\u4e4b\u540e\u6240\u5e26\u7684\u5173\u952e\u5b57const\u8868\u660e\uff0c\u5728\u8be5\u51fd\u6570\u4e2d\u4e0d\u80fd\u6539\u53d8\u7c7b\u4e2d\u7684\u6570\u636e\u6210\u5458\u7684\u503c\u3002\u5e26const\u7684\u51fd\u6570\u79f0\u4e3a\u5e38\u91cf\u6210\u5458\u51fd\u6570\u3002\u4e0b\u9762\u5c31\u662f\u4e2a\u9519\u8bef\u4f8b\u5b50\uff0c\u8bf4\u660econst\u7684\u4f5c\u7528\uff1aclass a{int a;public:void disp() const{a=4};//a=4\u9519\u8bef};

const\u5bf9\u8c61\u7684\u503c\u4e0d\u80fd\u88ab\u4fee\u6539\uff0c\u5728const\u6210\u5458\u51fd\u6570\u4e2d\u4fee\u6539const\u5bf9\u8c61\u6570\u636e\u6210\u5458\u7684\u503c\u662f\u8bed\u6cd5\u9519\u8bef \u5728const\u51fd\u6570\u4e2d\u8c03\u7528\u975econst\u6210\u5458\u51fd\u6570\u662f\u8bed\u6cd5\u9519\u8bef \u8fd9\u662f\u628a\u6574\u4e2a\u51fd\u6570\u4fee\u9970\u4e3aconst\uff0c\u610f\u601d\u662f\u201c\u51fd\u6570\u4f53\u5185\u4e0d\u80fd\u5bf9\u6210\u5458\u6570\u636e\u505a\u4efb\u4f55\u6539\u52a8\u201d\u3002\u5982\u679c\u4f60\u58f0\u660e\u8fd9\u4e2a\u7c7b\u7684\u4e00\u4e2aconst\u5b9e\u4f8b\uff0c\u90a3\u4e48\u5b83\u5c31\u53ea\u80fd\u8c03\u7528\u6709const\u4fee\u9970\u7684\u51fd\u6570\u3002 \u5e38\u6210\u5458\u51fd\u6570 \u4f7f\u7528const\u5173\u952e\u5b57\u8fdb\u884c\u8bf4\u660e\u7684\u6210\u5458\u51fd\u6570\uff0c\u79f0\u4e3a\u5e38\u6210\u5458\u51fd\u6570\u3002\u53ea\u6709\u5e38\u6210\u5458\u51fd\u6570\u624d\u6709\u8d44\u683c\u64cd\u4f5c\u5e38\u91cf\u6216\u5e38\u5bf9\u8c61\uff0c\u6ca1\u6709\u4f7f\u7528const\u5173\u952e\u5b57\u8bf4\u660e\u7684\u6210\u5458\u51fd\u6570\u4e0d\u80fd\u7528\u6765\u64cd\u4f5c\u5e38\u5bf9\u8c61\u3002\u5e38\u6210\u5458\u51fd\u6570\u8bf4\u660e\u683c\u5f0f\u5982\u4e0b\uff1a () const\uff1b \u5176\u4e2d\uff0cconst\u662f\u52a0\u5728\u51fd\u6570\u8bf4\u660e\u540e\u9762\u7684\u7c7b\u578b\u4fee\u9970\u7b26\uff0c\u5b83\u662f\u51fd\u6570\u7c7b\u578b\u7684\u4e00\u4e2a\u7ec4\u6210\u90e8\u5206\uff0c\u56e0\u6b64\uff0c\u5728\u51fd\u6570\u5b9e\u73b0\u90e8\u5206\u4e5f\u8981\u5e26const\u5173\u952e\u5b57\u3002\u4e0b\u9762\u4e3e\u4e00\u4f8b\u5b50\u8bf4\u660e\u5e38\u6210\u5458\u51fd\u6570\u7684\u7279\u5f81\u3002 #include class R { public: R(int r1, int r2) { R1=r1; R2=r2; } void print(); void print() const; private: int R1, R2; }; void R::print() { cout<<R1<<R2<<endl; } void R::print() const { cout<<R1<<R2<<endl; } void main() { R a(5, 4); a.print(); const R b(20, 52); b.print(); } \u8be5\u4f8b\u5b50\u7684\u8f93\u51fa\u7ed3\u679c\u4e3a\uff1a 5,4 20;52 \u8be5\u7a0b\u5e8f\u7684\u7c7b\u58f0\u660e\u4e86\u4e24\u4e2a\u6210\u5458\u51fd\u6570\uff0c\u5176\u7c7b\u578b\u662f\u4e0d\u540c\u7684(\u5176\u5b9e\u5c31\u662f\u91cd\u8f7d\u6210\u5458\u51fd\u6570)\u3002

  这是把整个函数修饰为const,意思是“函数体内不能对成员数据做任何改动”。如果你声明这个类的一个const实例,那么它就只能调用有const修饰的函数。

  如:

  class   Text{   
  public:   
          void   printconst(void)const{cout<<"hello"<<endl;}   
          void   print(void){cout<<"hello"<<endl;}   
  private:   
          int   k;   
  };   
  const   Text   a;   
  //上面定义了类Text的一常量对象   
  int   main(void)   
  {   
          a.printconst();   //ok   
          a.print();             //error       
          //上面a.print()调用是非法的   
          return   0;   
  }

      const对象只能调用const成员函数。   
      const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误 。
      在const函数中调用非const成员函数是语法错误



在声明const函数时,关键字const插在函数参数列表之后;在定义const函数时,关键字const必须插在表示函数体开始的左花括号之前。
这里引出了一个有趣的问题:构造函数和折构函数肯定是要修改对象的。实际上,const对象的构造函数和析构函数无需用关键字const声明。为了能够正确地初始化对象,构造函数必须允许修改对象。析构函数也必须要能够做一些撤销对象前的清理工作。
最好把const对象所要使用的所有成员函数都声明成const

表示常成员函数
常对象只能调用常成员函数,
常成员函数不允许修改类中数据成员(除加mutable
修饰词例外);
此常成员函数隐含一个常量this指针。

  • 涓涓嚱鏁板悕鍚庨潰鍔燾onst琛ㄧず浠涔堟剰鎬??
    绛旓細杩欐槸鎶婃暣涓嚱鏁颁慨楗颁负const锛鎰忔濇槸鈥滃嚱鏁颁綋鍐呬笉鑳藉鎴愬憳鏁版嵁鍋氫换浣曟敼鍔ㄢ銆傚鏋滀綘澹版槑杩欎釜绫荤殑涓涓猚onst瀹炰緥锛岄偅涔堝畠灏卞彧鑳借皟鐢ㄦ湁const淇グ鐨勫嚱鏁般傚锛歝lass Text{ public: void printconst(void)const{cout<<"hello"<<endl;} void print(void){cout<<"hello"<<endl;} priva...
  • const 鏀惧湪鍑芥暟鍚庤〃绀浠涔堟剰鎬
    绛旓細const 鏀惧湪鍑芥暟鍚庤〃绀鸿繖涓嚱鏁版槸甯告垚鍛樺嚱鏁, 甯告垚鍛樺嚱鏁版槸涓嶈兘鏀瑰彉鎴愬憳鍙橀噺鍊肩殑鍑芥暟銆俢onst 闄愬畾绗︼紝瀹冩妸涓涓璞¤浆鎹㈡垚涓涓父閲忋備妇渚嬶細涓轰簡浣挎垚鍛樺嚱鏁扮殑鎰忎箟鏇村姞娓呮锛屾垜浠彲鍦ㄤ笉鏀瑰彉瀵硅薄鐨勬垚鍛樺嚱鏁扮殑鍑芥暟鍘熷瀷涓姞涓奵onst璇存槑锛歝lass Point { public:int GetX() const;int GetY() const;void SetPt (...
  • 涓涓嚱鏁板悕鍚庨潰鍔燾onst琛ㄧず浠涔堟剰鎬
    绛旓細鍦ㄦ垚鍛樺嚱鏁颁腑鍦嗘嫭鍙蜂箣鍚庢墍甯︾殑鍏抽敭瀛梒onst琛ㄦ槑锛屽湪璇ュ嚱鏁颁腑涓嶈兘鏀瑰彉绫讳腑鐨勬暟鎹垚鍛樼殑鍊銆傚甫const鐨勫嚱鏁扮О涓哄父閲忔垚鍛樺嚱鏁般備笅闈㈠氨鏄釜閿欒渚嬪瓙锛岃鏄巆onst鐨勪綔鐢細class a{int a;public:void disp() const{a=4};//a=4閿欒};
  • C++鍦鍑芥暟澹版槑鏃,鍚庨潰璺熶釜const鏄浠涔堟剰鎬?
    绛旓細C++涓殑鍑芥暟澹版槑涓紝甯歌窡涓涓"const"鍏抽敭瀛楋紝琛ㄧず璇ュ嚱鏁版槸甯告垚鍛樺嚱鏁帮紝鍗冲畠涓嶈兘鏀瑰彉鍏舵墍灞炲璞$殑鎴愬憳鍙橀噺鍊銆傚鍑芥暟鍘熷瀷"double d() const"锛"const"鐨勫瓨鍦ㄦ剰鍛崇潃鍑芥暟鍐呴儴涓嶄細褰卞搷瀵硅薄鐨勭姸鎬侊紝鑻ヨ瘯鍥惧仛姝ょ被淇敼锛岀紪璇戦樁娈典細鎶ラ敊锛屼互纭繚浠g爜鐨勫彲璇绘у拰閬垮厤鎰忓鐨勯昏緫閿欒銆傚父鎴愬憳鍑芥暟鐨勪娇鐢ㄦ湁鍔╀簬鏄庣‘...
  • 鍑芥暟鍚鍓鍔燾onst鏄鍟ユ剰鎬
    绛旓細鏄寚璇ュ嚱鏁扮殑 杩斿洖鍊 鏄滃父閲忊濓紝涓嶅彲淇敼銆傞氬父杩欐牱鐨勫嚱鏁拌繑鍥炰竴涓紩鐢(&)鎴栨寚閽堛傛瘮濡傦細int& abc(...){...} int xyz(...){...} 浠ュ悗鍙互杩欐牱浣跨敤杩欎袱涓嚱鏁帮細abc(...)=100;xyz(...)=200;鑻ュ姞涓奵onst涔嬪悗锛屽氨闄愬埗杩欐牱鐨勮祴鍊笺
  • C++鍦鍑芥暟澹版槑鏃,鍚庨潰璺熶釜const鏄浠涔堟剰鎬?
    绛旓細C++鍦鍑芥暟澹版槑鏃讹紝鍚庨潰璺熶釜const鏄闄愬畾鍑芥暟绫诲瀷涓哄父鎴愬憳鍑芥暟, 甯告垚鍛樺嚱鏁版槸鎸囦笉鑳芥敼鍙樻垚鍛樺彉閲忓肩殑鍑芥暟銆備緥濡傗渄ouble d() const;鈥濓紝鍏朵腑鐨勫叾涓殑鈥渃onst鈥濋檺瀹氫簡d()鍑芥暟涓笉鑳芥湁浠讳綍鏀瑰彉鍏舵墍灞炲璞℃垚鍛樺彉閲忓肩殑鍔熻兘锛屽鏋滄湁鍒欎細鍦ㄧ紪璇戦樁娈靛氨鎶ラ敊銆傚畠鐨勪富瑕佷綔鐢ㄥ氨鏄兘浣挎垚鍛樺嚱鏁扮殑鎰忎箟鏇村姞娓呮锛屾垜浠...
  • const(涓):(杞) 涓涓嚱鏁板悕鍚庨潰鍔燾onst琛ㄧず浠涔堟剰鎬
    绛旓細甯告垚鍛樺嚱鏁拌鏄庢牸寮忓涓嬶細 <绫诲瀷璇存槑绗> <鍑芥暟鍚> (<鍙傛暟琛>) const锛 鍏朵腑锛const鏄鍔犲湪鍑芥暟璇存槑鍚庨潰鐨勭被鍨嬩慨楗扮锛屽畠鏄嚱鏁扮被鍨嬬殑涓涓缁勬垚閮ㄥ垎锛屽洜姝わ紝鍦ㄥ嚱鏁板疄鐜伴儴鍒嗕篃瑕佸甫const鍏抽敭瀛椼備笅闈妇涓渚嬪瓙璇存槑甯告垚鍛樺嚱鏁扮殑鐗瑰緛銆 #include class R { public: R(int r1, int r2) { R1=r1; R2=...
  • const鍦鍑芥暟鍚庨潰鏄浠涔堟剰鎬?
    绛旓細const淇グ璇存槑瀹鏄竴涓甯搁噺锛屽畠鐨勫兼槸涓嶈兘琚慨鏀圭殑銆傛病鏈変粈涔堝湴鏂规槸蹇呴』瑕佺敤鐨勶紝浣犲彧瑕佽寰楄繖涓暟瀛椾綘涓嶄細鏀瑰彉灏卞彲浠ョ敤銆備竴鑸湪鍑芥暟浼犻掑弬鏁颁腑鐢ㄧ殑姣旇緝澶氾紝浣犲彲浠ョ湅鐪婥璇█鐨勫簱鍑芥暟鍙傛暟涓緢澶氶兘鏄敤const淇グ鐨勩傛瘮濡傚瓧绗︿覆鎷疯礉鐨勫0鏄庡嚱鏁癱har *strcpy(char *dest,const char *src); 鍚庤竟鐨勫舰鍙傜敤浜...
  • C++涓const鍦鍑芥暟鍚鍓嶉潰鍜鍑芥暟鍚庨潰鐨勫尯鍒
    绛旓細鍦鍑芥暟鍚鍓嶉潰锛屼絾鏄杩斿洖鍊肩殑淇グ灏辫鐪嬩綘鐨勯渶姹備簡锛const鍦ㄥ墠闈㈠拰鍚庨潰琛ㄧず鐨勬剰涔変笉涓鏍 a.const int fun1() //杩欎釜鍏跺疄鏃犳剰涔夛紝鍥犱负鍙傛暟杩斿洖鏈韩灏辨槸璧嬪笺俠. const int * fun2() //璋冪敤鏃禼onst int *pValue = fun2();//鎴戜滑鍙互鎶奻un2()鐪嬩綔鎴涓涓鍙橀噺锛屽嵆鎸囬拡鍐呭涓嶅彲鍙樸俢.int* ...
  • c璇█闂,杩欎簺鍑芥暟鍚庤竟璺熶釜const 鍟ユ剰鎬 姹傝В
    绛旓細鍏堢湅鐪嬩笅闈㈣繖娈典唬鐮侊細constStockland=Stock("hyd");land.show();land 鏄父閲忥紝浣嗘槸绫绘垚鍛樺嚱鏁皊how鏃犳硶淇濊瘉涓嶄慨鏀筶and锛屾墍浠ョ紪璇戝櫒灏嗘嫆缁濇墽琛岃娈典唬鐮併傞櫎闈炰綘鑳戒繚璇乻how鍍const鍑芥暟涓鏍凤紝浣嗚繖闇瑕佸彟澶栦竴绉嶈娉曪紝鍗筹細void show() const; //澹版槑 void Stock::show() const{} //瀹氫箟 ...
  • 扩展阅读:const关键字及其作用 用法 ... 函数公式一览表 ... const放在函数后面 ... 函数图像大全 ... 函数后加const有什么用 ... countif函数统计颜色 ... 成员函数后面加const ... 函数括号后面的const ... const函数图像 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网