锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 瀵逛簬涓婇潰鍥涗釜鏉¤鍙ワ紝浣犺兘璇村嚭瀹冧滑涔嬮棿鐨勫尯鍒悧錛?br>2)鍜?)涓璫onst淇グ鐨勬槸*ip, 榪欒〃鏄巌p鎵鎸囧悜鐨勫彉閲廼鏄痗onst鐨勶紝綾諱技*ip = 1鐨勬搷浣滅紪璇戠殑鏃跺欓兘浼氭姤閿欙紱4)const淇グ鐨勬槸ip錛岃鏄庢寚閽堟湰韜槸const錛屼慨鏀規寚閽堟寚鍚戠殑鍙橀噺鏄悎娉曠殑錛岃岀被浼?+ip淇敼鎸囬拡鏈韓鐨勬搷浣滄槸榪濇硶鐨勶紱5)鎸囬拡鏈韓鍜屾寚鍚戠殑鍙橀噺閮芥槸const鐨勩?/p>
const鐨勭敤娉曚富瑕佷綋鐜板湪鍑芥暟澹版槑涓殑搴旂敤錛屽畠鏃㈠彲浠ヤ慨楗板嚱鏁板弬鏁幫紝榪樺彲浠ヤ慨楗板嚱鏁扮殑榪斿洖鍊鹼紝姝ゅ瀵逛簬綾葷殑鎴愬憳鍑芥暟錛屽畠榪樺彲浠ヤ慨楗版暣涓嚱鏁般備笅闈㈡槸涓涓畝鍗曠畝鍗曠殑浜岀淮鍚戦噺綾伙細 --const淇グ鍑芥暟鍙傛暟
嫻嬭瘯棰樺厛琛岋綖锝?br>
2 const int *ip = &i;
3 int const *ip = &i;
4 int* const ip = &i;
5 const int* const ip = &i;
float x, y;
public:
Vector2D( float _x = 0, float _y = 0 ) : x( _x ), y( _y )
{}
Vector2D( const Vector2D &vec ) : x( vec.x ), y( vec.y ) // 淇グ鍙傛暟
{}
float GetX() const { return x; } // 淇グ鏁翠釜鍑芥暟
const Vector2D operator + ( const Vector2D &rval ) const // 淇グ鍙傛暟錛岃繑鍥炲煎拰鏁翠釜鍑芥暟
{ return Vector2D( x + rval.x, y + rval.y ); }
};
鍦╟opy鏋勯犲嚱鏁頒腑錛宑onst淇グ鐨勬槸鍑芥暟鐨勫弬鏁幫紝璋冪敤鍑芥暟鐨勬椂鍊欙紝鐢ㄧ浉搴旂殑鍙橀噺鍒濆鍖朿onst甯擱噺錛屽垯鍦ㄥ嚱鏁頒綋涓紝鎸夌収const鎵淇グ鐨勯儴鍒嗚繘琛屽父閲忓寲錛屽褰㈠弬涓篶onst Vector2D &vec錛屽垯涓嶈兘瀵逛紶閫掕繘鏉ョ殑寮曠敤瀵硅薄鐨勮繘琛屾敼鍙橈紝浠庤屼繚鎶や簡鍘熷璞$殑灞炴с?br>[Tips]const閫氬父鐢ㄤ簬淇グ鎸囬拡鎴栧紩鐢ㄧ被鍨嬬殑鍙傛暟銆?br>
--const淇グ榪斿洖鍊?br>鍦ㄩ噸杞界殑鍚戦噺鍔犳硶榪愮畻絎︾殑鍑芥暟涓紝榪斿洖鍊肩敤const淇グ錛岃繖鏍峰涓嬬殑璧嬪兼搷浣滃氨闈炴硶鐨勶細
Vector2D vec1, vec2, vec3;
(vec1+vec2) = vec3;
[Tips]涓鑸儏鍐典笅錛屽嚱鏁扮殑榪斿洖鍊間負鏌愪釜瀵硅薄鏃訛紝濡傛灉灝嗗叾澹版槑涓篶onst鏃訛紝澶氱敤浜庤繍綆楃鐨勯噸杞姐傞氬父錛屽嚱鏁拌繑鍥炲間負鏌愪釜瀵硅薄鎴栧璞$殑寮曠敤鏃訛紝涓嶇敤const鏉ヤ慨楗般傚洜涓猴紝榪欐牱榪斿洖鐨勫疄渚嬪彧鑳借闂畃ublic鎴愬憳鍜宑onst鎴愬憳鍑芥暟錛屽茍涓旇祴鍊兼搷浣滀篃鏄潪娉曠殑錛岃繖鏍風殑鐢ㄦ硶鏄潪甯哥綍瑙佺殑銆?br>
--const淇グ綾葷殑鎴愬憳鍑芥暟
瀵逛簬Vector2D::GetX()鍑芥暟錛屽洜涓哄畠涓嶄細淇敼鎴愬憳鏁版嵁錛岃嫢澹版槑鎴恈onst錛屽鏋滃嚱鏁板疄鐜頒腑淇敼浜嗘垚鍛樺彉閲忥紝緙栬瘧鐨勬椂鍊欏皢鎶ラ敊錛岃繖鏍風▼搴忎細鏇村姞鐨凴obust~~
[Tips]
a.鍦ㄤ綘鎼炴竻妤歝onst鐨勭敤娉曚箣鍚庯紝璇峰ぇ鑳嗕嬌鐢紱
b.鍦ㄥ弬鏁頒腑浣跨敤const搴旇浣跨敤寮曠敤鎴栨寚閽堬紝鑰屼笉鏄竴鑸殑瀵硅薄瀹炰緥錛?br>c.涓嶈杞繪槗鐨勫皢鍑芥暟鐨勮繑鍥炲肩被鍨嬪畾涓篶onst錛?br>d.闄や簡閲嶈澆鎿嶄綔絎﹀涓鑸笉瑕佸皢榪斿洖鍊肩被鍨嬪畾涓哄鏌愪釜瀵硅薄鐨刢onst寮曠敤銆?/p>
1. 鏈川鍖哄埆
malloc/free鏄疌/C++璇█鐨勬爣鍑嗗簱鍑芥暟錛宯ew/delete鏄疌++鐨勮繍綆楃銆?br>瀵逛簬鐢ㄦ埛鑷畾涔夌殑瀵硅薄鑰岃█錛岀敤maloc/free鏃犳硶婊¤凍鍔ㄦ佺鐞嗗璞$殑瑕佹眰銆傚璞″湪鍒涘緩鐨勫悓鏃惰鑷姩鎵ц鏋勯犲嚱鏁幫紝瀵硅薄鍦ㄦ秷浜′箣鍓嶈鑷姩鎵ц鏋愭瀯鍑芥暟銆傜敱浜巑alloc/free鏄簱鍑芥暟鑰屼笉鏄繍綆楃錛屼笉鍦ㄧ紪璇戝櫒鎺у埗鏉冮檺涔嬪唴錛屼笉鑳藉鎶婃墽琛屾瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鐨勪換鍔″己鍔犱簬malloc/free銆傚洜姝++闇瑕佷竴涓兘瀹屾垚鍔ㄦ佸唴瀛樺垎閰嶅拰鍒濆鍖栧伐浣滅殑榪愮畻絎ew錛屼互鍙婁竴涓兘瀹屾垚娓呯悊涓庨噴鏀懼唴瀛樺伐浣滅殑榪愮畻絎elete銆?br>
綾籓bj鐨勫嚱鏁癐nitialize瀹炵幇浜嗘瀯閫犲嚱鏁扮殑鍔熻兘錛屽嚱鏁癉estroy瀹炵幇浜嗘瀽鏋勫嚱鏁扮殑鍔熻兘銆傚嚱鏁癠seMallocFree涓紝鐢變簬malloc/free涓嶈兘鎵ц鏋勯犲嚱鏁頒笌鏋愭瀯鍑芥暟錛屽繀欏昏皟鐢ㄦ垚鍛樺嚱鏁癐nitialize鍜孌estroy鏉ュ畬鎴?#8220;鏋勯?#8221;涓?#8220;鏋愭瀯”銆傛墍浠ユ垜浠笉瑕佺敤malloc/free鏉ュ畬鎴愬姩鎬佸璞$殑鍐呭瓨綆$悊錛屽簲璇ョ敤new/delete銆傜敱浜庡唴閮ㄦ暟鎹被鍨嬬殑“瀵硅薄”娌℃湁鏋勯犱笌鏋愭瀯鐨勮繃紼嬶紝瀵瑰畠浠岃█malloc/free鍜宯ew/delete鏄瓑浠風殑銆?br>
2. 鑱旂郴
鏃㈢劧new/delete鐨勫姛鑳藉畬鍏ㄨ鐩栦簡malloc/free錛屼負浠涔圕++榪樹繚鐣檓alloc/free鍛紵鍥犱負C++紼嬪簭緇忓父瑕佽皟鐢–鍑芥暟錛岃孋紼嬪簭鍙兘鐢╩alloc/free綆$悊鍔ㄦ佸唴瀛樸傚鏋滅敤free閲婃斁“new鍒涘緩鐨勫姩鎬佸璞?#8221;錛岄偅涔堣瀵硅薄鍥犳棤娉曟墽琛屾瀽鏋勫嚱鏁拌屽彲鑳藉鑷寸▼搴忓嚭閿欍傚鏋滅敤delete閲婃斁“malloc鐢寵鐨勫姩鎬佸唴瀛?#8221;錛岀悊璁轟笂璁茬▼搴忎笉浼氬嚭閿欙紝浣嗘槸璇ョ▼搴忕殑鍙鎬у緢宸傛墍浠ew/delete錛宮alloc/free蹇呴』閰嶅浣跨敤銆?br>