引用局部变量为什么要加const 关于c++ 既然不想参数改变 为什么要加引用 然后再加con...

C++\u4e2d\u4e3a\u4ec0\u4e48\u4e34\u65f6\u5bf9\u8c61\u7684\u5f15\u7528\u4e00\u5b9a\u8981\u52a0const;\u5c31\u50cf: const string& s = string("abc"); \u6c42\u8be6\u89e3

\u5982 iamchenmin \u6240\u8bf4\uff0c\u6709\u9632\u6b62\u4fee\u6539\u7684\u529f\u80fd\u3002\u53e6\uff0c

1\u3001\u8003\u8651\u5982\u4e0b\u51fd\u6570\u5b9a\u4e49\uff1a
int fun2(int& pi)
{
return pi;
}
\u56e0\u4e3a\u6ca1\u6709\u4fee\u6539pi\uff0c\u6240\u4ee5\u53c2\u6570\u5c31\u61d2\u5f97\u52a0const\u9650\u5236\uff0c\u4f46\u5728\u5176\u4ed6\u5730\u65b9\u8c03\u7528\u6b21\u51fd\u6570\u65f6\u4f1a\u6709\u9650\u5236\uff1a\u975econst\u7684\u5f15\u7528\u53c2\u6570\u5fc5\u987b\u7528\u4e0e\u5176\u7c7b\u578b\u4e00\u81f4\u7684\u5bf9\u8c61/\u91cf\u6765\u521d\u59cb\u5316\uff0c
\u4e5f\u5c31\u662f\u8bf4\u53ef\u4ee5\u8fd9\u6837\u7528\uff1aint a=5;b=fun2(a);
\u8fd9\u6837\uff1aint b=fun2(5);\u662f\u9519\u7684\u3002
\u56e0\u4e3a\u6570\u5b575\u662f\u4e00\u4e2a\u5b57\u9762\u503c\uff0c\u4e5f\u5c31\u662f\u4e2a\u53f3\u503c\uff0c\u800c\u51fd\u6570\u8981\u6c42\u7684\u662f\u4e00\u4e2a\u5177\u4f53\u7684int\u7c7b\u578b\u7684\u5bf9\u8c61/\u53d8\u91cf\uff0c\u9700\u8981\u5de6\u503c\u3002
\u7136\u540e\u8fd9\u6837\uff1along a=5;int b=fun2(a);\u4e5f\u4e0d\u884c\uff0c\u7c7b\u578b\u4e0d\u4e00\u6837\u3002
\u4f46\u53c2\u6570\u52a0\u4e0aconst\u540e\u4e0a\u4e24\u79cd\u90fd\u662f\u5408\u6cd5\u7684\uff0cconst\u5f15\u7528\u7684\u53c2\u6570\u5141\u8bb8\u53ef\u884c\u7684\u8f6c\u6362\uff0c\u6bd4\u5982fun2(3.14)\uff0c\u53c2\u6570\u662f\u4e2a\u6d6e\u70b9\uff0c\u4f46\u7f16\u8bd1\u5668\u4f1a\u8f6c\u6362\u6210int\u7136\u540e\u8c03\u7528\uff0c\u8981\u662f\u538b\u6839\u8f6c\u6362\u4e0d\u8fc7\u53bb\u90a3\u80af\u5b9a\u52a0\u4e86const\u4e5f\u4e0d\u884c\u7684\u3002

2\u3001\u53e6\u5916\uff0c\u5373\u4f7f\u8bf4\uff0c\u6211\u6240\u6709\u4ee3\u7801\u4e3a\u4e86\u6613\u8bfb\uff0c\u7edd\u5bf9\u4e0d\u4f1a\u51fa\u73b0\u5b57\u9762\u503c\u8fd9\u4e1c\u897f\uff0c\u8fd8\u6709\u4e2a\u95ee\u9898\u3002\u5982\u679c\u4f60\u5199\u4e86\u4e2a\u51fd\u6570\u4e3a\u4e86\u4fdd\u62a4\u53c2\u6570\u52a0\u4e86const\uff0c\u4f46\u51fd\u6570\u91cc\u9762\u8c03\u7528\u4e86\u53e6\u4e00\u4e2a\u53c2\u6570\u6ca1const\u7684\u51fd\u6570\uff0c\u90a3\u4e48\u8fd9\u91cc\u4f30\u8ba1\u5c31\u8981\u51fa\u9519\uff0cconst\u5b9e\u53c2\u4e0d\u80fd\u4f20\u9012\u7ed9\u975econst\u5f62\u53c2\u3002\u867d\u7136\u4f60\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u4ee3\u7801\u4e0d\u51b2\u7a81\uff0c\u4f46\u4e0d\u80fd\u4fdd\u8bc1\u522b\u4eba\u7684\u4ee3\u7801\uff0c\u5c24\u5176\u662f\u5408\u4f5c\u7684\u65f6\u5019\u6bcf\u4eba\u5199\u4e00\u4e2a\u90e8\u5206\u3002

3\u3001\u7efc\u4e0a\uff0c\u4e0d\u9700\u8981\u6539\u52a8\u7684\u53c2\u6570\uff0c\u5982\u679c\u8981\u901a\u8fc7\u5f15\u7528\u4f20\u9012\uff0c\u5168\u90fd\u52a0\u4e0aconst\u6700\u5b89\u5168\u3002

ps\uff1a\u4f60\u6240\u8bf4\u7684\u201c\u5f3a\u5236\u8981\u6c42\u6dfb\u52a0\u7684\u201d\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u5f3a\u5236\uff0c\u56e0\u4e3a\u52a0\u4e0d\u52a0\u662f\u4f5c\u8005\u81ea\u5df1\u7684\u610f\u601d\uff0c\u800c\u7f16\u8bd1\u9519\u8bef\u90fd\u662f\u51fa\u5728\u8c03\u7528\u7684\u8bed\u53e5\uff0c\u4e5f\u5c31\u662f\u4f7f\u7528\u8005\u9519\u4e86 o(\u2229_\u2229)o...

\u5982\u679c\u4f60\u7528\u5e38\u5f15\u7528\uff0c\u9664\u4e86\u4e0d\u80fd\u4fee\u6539\u4e4b\u5916\uff0c\u989d\u5916\u7684\u597d\u5904\u662f\u5b83\u4e0d\u9700\u8981\u590d\u5236\u4e00\u4e2a\u62f7\u8d1d\u8fdb\u53bb\u3002\u5bf9\u4e8eint\u7740\u6ca1\u6709\u610f\u4e49\uff0c\u4f46\u662f\u5bf9\u4e8e\u5927\u5bf9\u8c61\uff0c\u591a\u4e00\u4e2a\u62f7\u8d1d\u4f1a\u5360\u7528\u5f88\u591a\u7684\u5185\u5b58\uff0c\u4e5f\u8981\u6d88\u8017\u4e00\u5b9a\u7684\u62f7\u8d1d\u5bf9\u8c61\u7684\u65f6\u95f4\uff0c\u66f4\u4f55\u51b5\u6709\u4e9b\u5bf9\u8c61\uff08\u5982CWnd\uff09\u6839\u672c\u5c31\u4e0d\u5141\u8bb8\u62f7\u8d1d\uff0c\u4f60\u6839\u672c\u4e0d\u80fd\u76f4\u63a5\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\u6765\u4f20\u503c

用const声明变量,表示变量是只读变量,只能用,不能被修改,若修改了const变量,编辑器会提醒出错。

const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。被const修饰的变量称为常类型变量。
const的主要作用:
(1)可以定义const常量,具有不可变性。
例如:const int Max=100; Max++会产生错误;
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;
(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可!
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错。
例如: void f(const int i) { i=10;//error! }
(5) 可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏
const double Pi=3.14159; //此时并未将Pi放入RAM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
(6) 提高了效率。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

  • 鍏充簬C璇█鐨,涓嬪懆瑕佷氦,甯垜鍟妦~~
    绛旓細鍙﹀涓涓闇瑕鑰冭檻鐨勬槸灞閮ㄥ彉閲鐨勬暟閲.浠栦滑涓嶅簲璇ヨ秴杩5-10涓,鍚﹀垯浣犳湁鍙兘浼氬嚭閿.閲嶆柊鑰冭檻杩欎釜鍑芥暟,灏嗕粬浠垎鍓叉垚鏇村皬鐨勫嚱鏁.浜虹殑澶ц剳閫氬父鍙互寰堝鏄撶殑璁颁綇7浠朵笉鍚岀殑浜嬫儏,瓒呰繃杩欎釜鏁伴噺浼氬紩璧锋贩涔.浣犵煡閬撲綘寰堣仾鏄,浣嗘槸浣犲彲鑳戒粛鎯冲幓鏄庣櫧2鍛ㄤ互鍓嶇殑鍋氱殑浜嬫儏.绗5绔:娉ㄩ噴 娉ㄩ噴鏄竴浠跺緢濂界殑浜嬫儏,浣嗘槸杩囧鐨...
  • C璇█涓殑鏁版嵁绫诲瀷浣跨敤闂
    绛旓細(Stringfication),绠鍗曡灏辨槸鍦ㄥ瀹冩墍寮曠敤鐨勫畯鍙橀噺閫氳繃鏇挎崲鍚庡湪鍏跺乏鍙冲悇鍔犱笂涓涓弻寮曞彿銆傛瘮濡備笅闈唬鐮佷腑鐨勫畯:#define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, Warning #EXP n); } while(0)閭d箞瀹為檯浣跨敤涓細鍑虹幇涓嬮潰鎵绀虹殑鏇挎崲杩囩▼:WARN_IF (divider == 0);琚浛鎹负do {if (divider == 0)fprint...
  • C++杩愮畻绗﹂噸杞界殑涓涓棶棰
    绛旓細鐓т綘璇寸殑鎯呭喌锛鏄鎶婁竴涓璞′腑鍐呴儴鍒嗛厤鐨勬暟缁勪紶缁欏彟涓涓璞锛屽嵆浣垮湪鍘熷璞¤鏋愭瀯浠ュ悗杩樿姹備繚瀛樻湁杩欎釜鏁扮粍绌洪棿锛岃繖鏄繚鍙嶄簡鏁版嵁灏佽鐨勫師鍒欑殑锛屽簲璇ラ伩鍏嶏紱濡傛灉鍘熷璞′腑鐨勬暟缁勪笉鏄師瀵硅薄鍒嗛厤鐨勶紝閭d箞杩欎釜鏁扮粍绌洪棿鐨勫洖鏀朵篃涓嶅簲璇ョ敱杩欎釜瀵硅薄鏉ュ仛锛屼篃涓嶄細鍑虹幇杩欑闂銆傛墍浠ユ垜鐚滄祴鍙兘鏄被鐨勮璁′笉鑹棶棰樸
  • 浠涔鏄壇濂界殑缂栫▼椋庢牸(Java缂栫▼)
    绛旓細鍙﹀涓涓闇瑕鑰冭檻鐨勬槸灞閮ㄥ彉閲鐨勬暟閲.浠栦滑涓嶅簲璇ヨ秴杩5-10涓,鍚﹀垯浣犳湁鍙兘浼氬嚭閿.閲嶆柊鑰冭檻杩欎釜鍑芥暟,灏嗕粬浠垎鍓叉垚鏇村皬鐨勫嚱鏁.浜虹殑澶ц剳閫氬父鍙互寰堝鏄撶殑璁颁綇7浠朵笉鍚岀殑浜嬫儏,瓒呰繃杩欎釜鏁伴噺浼氬紩璧锋贩涔.浣犵煡閬撲綘寰堣仾鏄,浣嗘槸浣犲彲鑳戒粛鎯冲幓鏄庣櫧2鍛ㄤ互鍓嶇殑鍋氱殑浜嬫儏. 绗5绔:娉ㄩ噴 娉ㄩ噴鏄竴浠跺緢濂界殑浜嬫儏,浣嗘槸杩囧鐨勬敞閲婁篃鏄嵄...
  • 瀹屾垚涓涓猄cheme瑙i噴鍣闇瑕鍝簺鐭ヨ瘑
    绛旓細鍏堝啓鑳借В閲婄畻鏈〃杈惧紡鐨勮В閲婂櫒锛涚劧鍚庡姞鍏et锛岃兘鍒堕灞閮ㄥ彉閲锛涚劧鍚庡姞鍏ambda锛岃兘鍒堕犻潪閫掑綊鐨勫嚱鏁帮紱鐒跺悗鍔犲叆letrec锛岃兘鍒堕犻掑綊鐨勫嚱鏁帮紱鍓嶅嚑涓换鍔″畬鎴愪簡锛宖irst class function鍜 closure鐞嗚В/瀹炵幇鍒颁綅浜嗭紝鎺ヤ笅鏉ユ槸锛氬姞if-else绛夎娉曠硸锛涙妸cons/cat/cdr鏀逛负鍐呭缓鍑芥暟锛堝師鏉ョ敤lambda calculus鍙互妯℃嫙锛夛紝...
  • 闂寘鐨凩ua涓
    绛旓細褰撲竴涓嚱鏁板唴閮ㄥ祵濂楀彟涓涓嚱鏁板畾涔夋椂锛屽唴閮ㄧ殑鍑芥暟浣撳彲浠ヨ闂閮ㄧ殑鍑芥暟鐨灞閮ㄥ彉閲锛岃繖绉嶇壒寰佸湪lua涓垜浠О浣滆瘝娉曞畾鐣屻傝櫧鐒惰繖鐪嬭捣鏉ュ緢娓呮锛屼簨瀹炲苟闈炲姝わ紝璇嶆硶瀹氱晫鍔犱笂绗竴绫诲嚱鏁板湪缂栫▼璇█閲屾槸涓涓姛鑳藉己澶х殑姒傚康锛屽緢灏戣瑷鎻愪緵杩欑鏀寔銆備笅闈㈢湅涓涓畝鍗曠殑渚嬪瓙锛屽亣瀹氭湁涓涓鐢熷鍚嶇殑鍒楄〃鍜屼竴涓鐢熷悕鍜...
  • 鍏充簬缂栫▼椋庢牸??
    绛旓細鍙﹀涓涓闇瑕鑰冭檻鐨勬槸灞閮ㄥ彉閲鐨勬暟閲.浠栦滑涓嶅簲璇ヨ秴杩5-10涓,鍚﹀垯浣犳湁鍙兘浼氬嚭閿.閲嶆柊鑰冭檻杩欎釜鍑芥暟,灏嗕粬浠垎鍓叉垚鏇村皬鐨勫嚱鏁.浜虹殑澶ц剳閫氬父鍙互寰堝鏄撶殑璁颁綇7浠朵笉鍚岀殑浜嬫儏,瓒呰繃杩欎釜鏁伴噺浼氬紩璧锋贩涔.浣犵煡閬撲綘寰堣仾鏄,浣嗘槸浣犲彲鑳戒粛鎯冲幓鏄庣櫧2鍛ㄤ互鍓嶇殑鍋氱殑浜嬫儏. 绗5绔:娉ㄩ噴 娉ㄩ噴鏄竴浠跺緢濂界殑浜嬫儏,浣嗘槸杩囧鐨勬敞閲婁篃鏄嵄...
  • 缂栫▼涓畯鐨勭敤娉
    绛旓細endif 2,閲嶆柊瀹氫箟涓浜涚被鍨,闃叉鐢变簬鍚勭骞冲彴鍜岀紪璇戝櫒鐨勪笉鍚,鑰屼骇鐢熺殑绫诲瀷瀛楄妭鏁 宸紓,鏂逛究绉绘銆倀ypedef unsigned char boolean; Boolean value type.typedef unsigned long int uint32; Unsigned 32 bit value typedef unsigned short uint16; Unsigned 16 bit value typedef unsigned char uint8; ...
  • 扩展阅读:c语言未引用局部变量 ... 局部变量的三种形式是 ... c280未引用局部变量 ... 引号局部引用 ... 局部变量放在哪里 ... 引用了已清除的变量 ... python引用局部变量 ... 对局部变量不正确描述 ... 未引用的局部变量怎么解决 ...

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