锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
浣跨敤const鐨勫ソ澶勫湪浜庡畠鍏佽鎸囧畾涓縐嶈鎰忎笂鐨勭害鏉?-----鏌愮瀵硅薄涓嶈兘琚慨鏀?-------緙栬瘧鍣ㄥ叿浣撴潵瀹?/span>
鏂借繖縐嶇害鏉熴傞氳繃const錛屼綘鍙互閫氱煡緙栬瘧鍣ㄥ拰鍏朵粬紼嬪簭鍛樻煇涓艱淇濇寔涓嶅彉銆傚彧瑕佹槸榪欑鎯呭喌錛屼綘灝辮
鏄庣‘鍦頒嬌鐢╟onst 錛屽洜涓鴻繖鏍峰仛灝卞彲浠ュ熷姪緙栬瘧鍣ㄧ殑甯姪紜繚榪欑綰︽潫涓嶈鐮村潖銆?/span>
錛堜竴錛?/span>
棣栧厛瑙i噴涓涓媍onst涓庢寚閽堢殑鍏崇郴錛?/span>
const鍦ㄦ寚閽堢殑澹版槑涓湁涓涓嬩笁縐嶅艦寮忥細
const char *p = "hello"; // 闈瀋onst鎸囬拡,
// const鏁版嵁錛屽氨鏄p鎸囧悜鐨勯偅涓唴瀛樼┖闂寸殑鏁版嵁鏄笉鍙?/span>
鍙樼殑錛屼絾p榪樺彲浠ユ寚鍚戞柊鐨勫唴瀛樺湴鍧銆?/span>
char * const p = "hello"; // const鎸囬拡,
// 闈瀋onst鏁版嵁錛屽氨鏄榪欎釜鎸囬拡p涓鏃﹁祴鍊兼垨鍒濆鍖栵紝灝?/span>
涓嶈兘鍦ㄦ寚鍚戝叾浠栦綅緗簡錛屼絾鍏舵寚鍚戠殑浣嶇疆鐨勬暟鎹兼槸鍙彉鐨勩?/span>
const char * const p = "hello"; // const鎸囬拡,
// const鏁版嵁錛岃繖涓氨寰堟槑鏄句簡錛岄泦涓婅堪涓ゅ涔嬮暱澶勶紙涔?/span>
鍙兘鏄煭澶勫摝錛岋級錛屼笂榪頒袱鑰呴兘涓嶅彲鍙樸?/span>
涓鑸潵璇達紝浣犲彲浠ュ湪澶磋剳閲岀敾涓鏉″瀭鐩寸嚎絀胯繃鎸囬拡澹版槑涓殑鏄熷彿錛?錛変綅緗紝濡傛灉const鍑虹幇鍦ㄧ嚎鐨勫乏杈癸紝
鎸囬拡鎸囧悜鐨勬暟鎹負甯擱噺錛涘鏋渃onst鍑虹幇鍦ㄧ嚎鐨勫彸杈癸紝鎸囬拡鏈韓涓哄父閲忥紱濡傛灉const鍦ㄧ嚎鐨勪袱杈歸兘鍑虹幇錛屼簩
鑰呴兘鏄父閲忋?/span>
鎭╋紝宸偣蹇樹簡錛岃繕鏈変竴縐嶅艦寮忥細
char const * p = "hello";
榪欏叾瀹炰笌涓婅竟鐨勬儏褰竴鏄竴鏍風殑錛屽彧鏄敱浜庝釜浜轟範鎯殑涓嶅悓錛屼簩鑰呴兘鏄鐨勩?/span>
錛堜簩錛?/span>
鍦ㄤ竴涓嚱鏁板0鏄庝腑錛宑onst鍙互鎸囩殑鏄嚱鏁扮殑榪斿洖鍊鹼紝鎴栨煇涓弬鏁幫紱瀵逛簬鎴愬憳鍑芥暟錛岃繕鍙互鎸囩殑鏄暣涓嚱
鏁般?/span>
const錛?錛?int fun(int const錛?錛?amp; )const錛?錛?/span>
{
int temp;
retrun temp;
}
鍙傛暟鐨?const灞炴э紙涓婁緥2澶勶級涓鑸敤寮曠敤浼犻掞紝鏄負浜嗕繚璇佽鍙傛暟鍦ㄥ嚱鏁頒腑涓嶅厑璁歌淇敼錛屼竴鏃︿慨鏀癸紝
緙栬瘧鍣ㄤ細鎶ラ敊銆?/span>
鑰岃繑鍥炲肩殑const灞炴э紙涓婁緥1澶勶級鏄繚璇佸嚱鏁扮殑榪斿洖鍊間笉琚慨鏀癸紝涔熻浣犱細璐ㄧ枒榪欑鍙兘鎬э紝浣嗘槸榪欑鍙?/span>
鑳芥х‘瀹炲瓨鍦紝
璇︾粏鎯呭艦濡備笅錛氾紙鎽樿嚜effective c++錛?/span>
const rational operator*(const rational& lhs,
const rational& rhs);
寰堝紼嬪簭鍛樼涓鐪肩湅鍒板畠浼氱撼闂鳳細涓轟粈涔坥perator*鐨勮繑鍥炵粨鏋滄槸涓涓猚onst瀵硅薄錛熷洜涓哄鏋滀笉鏄繖鏍鳳紝鐢?/span>
鎴峰氨鍙互鍋氫笅闈㈣繖鏍風殑鍧忎簨錛?/span>
rational a, b, c;
...
(a * b) = c; // 瀵筧*b鐨勭粨鏋滆祴鍊?/span>
鎴戜笉鐭ラ亾涓轟粈涔堟湁浜涚▼搴忓憳浼氭兂鍒板涓や釜鏁扮殑榪愮畻緇撴灉鐩存帴璧嬪鹼紝浣嗘垜鍗寸煡閬擄細濡傛灉a錛宐鍜宑鏄浐瀹氱被鍨?/span>
錛岃繖鏍峰仛鏄劇劧鏄笉鍚堟硶鐨勩備竴涓ソ鐨勭敤鎴瘋嚜瀹氫箟綾誨瀷鐨勭壒寰佹槸錛屽畠浼氶伩鍏嶉偅縐嶆病閬撶悊鐨勪笌鍥哄畾綾誨瀷涓嶅吋瀹?/span>
鐨勮涓恒傚鎴戞潵璇達紝瀵逛袱涓暟鐨勮繍綆楃粨鏋滆祴鍊兼槸闈炲父娌¢亾鐞嗙殑銆傚0鏄巓perator*鐨勮繑鍥炲間負const鍙互闃叉
榪欑鎯呭喌錛屾墍浠ヨ繖鏍峰仛鎵嶆槸姝g‘鐨勩?/span>
鍛靛懙錛岃薄Scott Meyers榪欐牱鐨勫ぇ甯堣鍦板氨鏄笉涓鑸惂
鎺ヤ笅鏉ヨ鏄庡嚱鏁扮殑const灞炴э細錛堜笂渚?澶勶級
褰撶劧鍠斤紝涓鑸敤浜庢垚鍛樺嚱鏁頒簡錛屽畠鏈変互涓嬪睘鎬э細
錛?錛塩onst鎴愬憳鍑芥暟涓嶈鍏佽淇敼瀹冩墍鍦ㄥ璞$殑浠諱綍涓涓暟鎹垚鍛樸?/span>
錛?錛塩onst鎴愬憳鍑芥暟鑳藉璁塊棶瀵硅薄鐨刢onst鎴愬憳錛岃屽叾浠栨垚鍛樺嚱鏁頒笉鍙互銆?/span>
錛堜笁錛夊敖閲忎嬌鐢?const浠f浛define 鍚э紝鍥犱負const鏄被鍨嬪畨鍏ㄧ殑銆?/span>
搴旇浣跨敤
const double pi = 3.1415926;
鑰屼笉瑕佺敤#define pi 3.1415926
鍚庤呮槸瀹忥紝浠呬粎鏄紼嬪簭涓殑pi鐢?.1415926浠f浛錛屼細璁╀綘瀵逛簬涓浜涚紪璇戞椂鐨勯敊璇緢闅懼畾浣嶃?/span>
]]>
]]>
銆愬璇匯戜粙緇岰++寮曠敤鐨勫熀鏈蹇碉紝閫氳繃璇︾粏鐨勫簲鐢ㄥ垎鏋愪笌璇存槑錛屽寮曠敤榪涜鍏ㄩ潰銆侀忓交鍦伴槓榪?
寮曠敤鏄疌++寮曞叆鐨勬柊璇█鐗規э紝鏄疌++甯哥敤鐨勪竴涓噸瑕佸唴瀹逛箣涓錛屾紜佺伒媧誨湴浣跨敤寮曠敤錛屽彲浠ヤ嬌紼嬪簭綆媧併侀珮鏁堛?br>
寮曠敤綆浠?br>
寮曠敤灝辨槸鏌愪竴鍙橀噺錛堢洰鏍囷級鐨勪竴涓埆鍚嶏紝瀵瑰紩鐢ㄧ殑鎿嶄綔涓庡鍙橀噺鐩存帴鎿嶄綔瀹屽叏涓鏍楓?br>
寮曠敤鐨勫0鏄庢柟娉曪細綾誨瀷鏍囪瘑絎?&寮曠敤鍚?鐩爣鍙橀噺鍚嶏紱
銆愪緥1銆戯細int a; int &ra=a; //瀹氫箟寮曠敤ra,瀹冩槸鍙橀噺a鐨勫紩鐢紝鍗沖埆鍚?br>
璇存槑錛?br>
錛?錛?amp;鍦ㄦ涓嶆槸姹傚湴鍧榪愮畻錛岃屾槸璧鋒爣璇嗕綔鐢ㄣ?br>
錛?錛夌被鍨嬫爣璇嗙鏄寚鐩爣鍙橀噺鐨勭被鍨嬨?br>
錛?錛夊0鏄庡紩鐢ㄦ椂錛屽繀欏誨悓鏃跺鍏惰繘琛屽垵濮嬪寲銆?br>
錛?錛夊紩鐢ㄥ0鏄庡畬姣曞悗錛岀浉褰撲簬鐩爣鍙橀噺鍚嶆湁涓や釜鍚嶇О錛屽嵆璇ョ洰鏍囧師鍚嶇О鍜屽紩鐢ㄥ悕錛屼笖涓嶈兘鍐嶆妸璇ュ紩鐢ㄥ悕浣滀負鍏朵粬鍙橀噺鍚嶇殑鍒悕銆?br>
ra=1; 絳変環浜?a=1;
錛?錛夊0鏄庝竴涓紩鐢紝涓嶆槸鏂板畾涔変簡涓涓彉閲忥紝瀹冨彧琛ㄧず璇ュ紩鐢ㄥ悕鏄洰鏍囧彉閲忓悕鐨勪竴涓埆鍚嶏紝瀹冩湰韜笉鏄竴縐嶆暟鎹被鍨嬶紝鍥犳寮曠敤鏈韓涓嶅崰瀛樺偍鍗曞厓錛岀郴緇熶篃涓嶇粰寮曠敤鍒嗛厤瀛樺偍鍗曞厓銆傛晠錛氬寮曠敤姹傚湴鍧錛屽氨鏄鐩爣鍙橀噺姹傚湴鍧銆?amp;ra涓?amp;a鐩哥瓑銆?br>
錛?錛変笉鑳藉緩绔嬫暟緇勭殑寮曠敤銆傚洜涓烘暟緇勬槸涓涓敱鑻ュ共涓厓绱犳墍緇勬垚鐨勯泦鍚堬紝鎵浠ユ棤娉曞緩绔嬩竴涓暟緇勭殑鍒悕銆?br>
寮曠敤搴旂敤
1銆佸紩鐢ㄤ綔涓哄弬鏁?
寮曠敤鐨勪竴涓噸瑕佷綔鐢ㄥ氨鏄綔涓哄嚱鏁扮殑鍙傛暟銆備互鍓嶇殑C璇█涓嚱鏁板弬鏁頒紶閫掓槸鍊間紶閫掞紝濡傛灉鏈夊ぇ鍧楁暟鎹綔涓哄弬鏁頒紶閫掔殑鏃跺欙紝閲囩敤鐨勬柟妗堝線寰鏄寚閽堬紝鍥犱負榪欐牱鍙互閬垮厤灝嗘暣鍧楁暟鎹叏閮ㄥ帇鏍堬紝鍙互鎻愰珮紼嬪簭鐨勬晥鐜囥備絾鏄幇鍦紙C++涓級鍙堝鍔犱簡涓縐嶅悓鏍鋒湁鏁堢巼鐨勯夋嫨錛堝湪鏌愪簺鐗規畩鎯呭喌涓嬪張鏄繀欏葷殑閫夋嫨錛夛紝灝辨槸寮曠敤銆?br>
銆愪緥2銆戯細
void swap(int &p1, int &p2) //姝ゅ鍑芥暟鐨勫艦鍙俻1, p2閮芥槸寮曠敤
{ int p; p=p1; p1=p2; p2=p; }
涓哄湪紼嬪簭涓皟鐢ㄨ鍑芥暟錛屽垯鐩稿簲鐨勪富璋冨嚱鏁扮殑璋冪敤鐐瑰錛岀洿鎺ヤ互鍙橀噺浣滀負瀹炲弬榪涜璋冪敤鍗沖彲錛岃屼笉闇瑕佸疄鍙傚彉閲忔湁浠諱綍鐨勭壒孌婅姹傘傚錛氬搴斾笂闈㈠畾涔夌殑swap鍑芥暟錛岀浉搴旂殑涓昏皟鍑芥暟鍙啓涓猴細
main( )
{
銆int a,b;
銆cin>>a>>b; //杈撳叆a,b涓ゅ彉閲忕殑鍊?br>
銆swap(a,b); //鐩存帴浠ュ彉閲廰鍜宐浣滀負瀹炲弬璋冪敤swap鍑芥暟
銆cout<<a<< ' ' <<b; //杈撳嚭緇撴灉
}
涓婅堪紼嬪簭榪愯鏃訛紝濡傛灉杈撳叆鏁版嵁10 20騫跺洖杞﹀悗錛屽垯杈撳嚭緇撴灉涓?0 10銆?br>
鐢便愪緥2銆戝彲鐪嬪嚭錛?br>
錛?錛変紶閫掑紩鐢ㄧ粰鍑芥暟涓庝紶閫掓寚閽堢殑鏁堟灉鏄竴鏍風殑銆傝繖鏃訛紝琚皟鍑芥暟鐨勫艦鍙傚氨鎴愪負鍘熸潵涓昏皟鍑芥暟涓殑瀹炲弬鍙橀噺鎴栧璞$殑涓涓埆鍚嶆潵浣跨敤錛屾墍浠ュ湪琚皟鍑芥暟涓褰㈠弬鍙橀噺鐨勬搷浣滃氨鏄鍏剁浉搴旂殑鐩爣瀵硅薄錛堝湪涓昏皟鍑芥暟涓級鐨勬搷浣溿?br>
錛?錛変嬌鐢ㄥ紩鐢ㄤ紶閫掑嚱鏁扮殑鍙傛暟錛屽湪鍐呭瓨涓茍娌℃湁浜х敓瀹炲弬鐨勫壇鏈紝瀹冩槸鐩存帴瀵瑰疄鍙傛搷浣滐紱鑰屼嬌鐢ㄤ竴鑸彉閲忎紶閫掑嚱鏁扮殑鍙傛暟錛屽綋鍙戠敓鍑芥暟璋冪敤鏃訛紝闇瑕佺粰褰㈠弬鍒嗛厤瀛樺偍鍗曞厓錛屽艦鍙傚彉閲忔槸瀹炲弬鍙橀噺鐨勫壇鏈紱濡傛灉浼犻掔殑鏄璞★紝榪樺皢璋冪敤鎷瘋礉鏋勯犲嚱鏁般傚洜姝わ紝褰撳弬鏁頒紶閫掔殑鏁版嵁杈冨ぇ鏃訛紝鐢ㄥ紩鐢ㄦ瘮鐢ㄤ竴鑸彉閲忎紶閫掑弬鏁扮殑鏁堢巼鍜屾墍鍗犵┖闂撮兘濂姐?br>
錛?錛変嬌鐢ㄦ寚閽堜綔涓哄嚱鏁扮殑鍙傛暟铏界劧涔熻兘杈懼埌涓庝嬌鐢ㄥ紩鐢ㄧ殑鏁堟灉錛屼絾鏄紝鍦ㄨ璋冨嚱鏁頒腑鍚屾牱瑕佺粰褰㈠弬鍒嗛厤瀛樺偍鍗曞厓錛屼笖闇瑕侀噸澶嶄嬌鐢?*鎸囬拡鍙橀噺鍚?鐨勫艦寮忚繘琛岃繍綆楋紝榪欏緢瀹規槗浜х敓閿欒涓旂▼搴忕殑闃呰鎬ц緝宸紱鍙︿竴鏂歸潰錛屽湪涓昏皟鍑芥暟鐨勮皟鐢ㄧ偣澶勶紝蹇呴』鐢ㄥ彉閲忕殑鍦板潃浣滀負瀹炲弬銆傝屽紩鐢ㄦ洿瀹規槗浣跨敤錛屾洿娓呮櫚銆?br>
濡傛灉鏃㈣鍒╃敤寮曠敤鎻愰珮紼嬪簭鐨勬晥鐜囷紝鍙堣淇濇姢浼犻掔粰鍑芥暟鐨勬暟鎹笉鍦ㄥ嚱鏁頒腑琚敼鍙橈紝灝卞簲浣跨敤甯稿紩鐢ㄣ?br>
2銆佸父寮曠敤
甯稿紩鐢ㄥ0鏄庢柟寮忥細const 綾誨瀷鏍囪瘑絎?&寮曠敤鍚?鐩爣鍙橀噺鍚嶏紱
鐢ㄨ繖縐嶆柟寮忓0鏄庣殑寮曠敤錛屼笉鑳介氳繃寮曠敤瀵圭洰鏍囧彉閲忕殑鍊艱繘琛屼慨鏀?浠庤屼嬌寮曠敤鐨勭洰鏍囨垚涓篶onst錛岃揪鍒頒簡寮曠敤鐨勫畨鍏ㄦс?br>
銆愪緥3銆戯細
int a ;
const int &ra=a;
ra=1; //閿欒
a=1; //姝g‘
榪欎笉鍏夋槸璁╀唬鐮佹洿鍋ュ.錛屼篃鏈変簺鍏跺畠鏂歸潰鐨勯渶瑕併?br>
銆愪緥4銆戯細鍋囪鏈夊涓嬪嚱鏁板0鏄庯細
string foo( );
void bar(string & s);
閭d箞涓嬮潰鐨勮〃杈懼紡灝嗘槸闈炴硶鐨勶細
bar(foo( ));
bar("hello world");
鍘熷洜鍦ㄤ簬foo( )鍜?hello world"涓查兘浼氫駭鐢熶竴涓復鏃跺璞★紝鑰屽湪C++涓紝榪欎簺涓存椂瀵硅薄閮芥槸const綾誨瀷鐨勩傚洜姝や笂闈㈢殑琛ㄨ揪寮忓氨鏄瘯鍥懼皢涓涓猚onst綾誨瀷鐨勫璞¤漿鎹負闈瀋onst綾誨瀷錛岃繖鏄潪娉曠殑銆?br>
寮曠敤鍨嬪弬鏁板簲璇ュ湪鑳借瀹氫箟涓篶onst鐨勬儏鍐典笅錛屽敖閲忓畾涔変負const 銆?br>
3銆佸紩鐢ㄤ綔涓鴻繑鍥炲?br>
瑕佷互寮曠敤榪斿洖鍑芥暟鍊鹼紝鍒欏嚱鏁板畾涔夋椂瑕佹寜浠ヤ笅鏍煎紡錛?br>
綾誨瀷鏍囪瘑絎?&鍑芥暟鍚嶏紙褰㈠弬鍒楄〃鍙婄被鍨嬭鏄庯級
{鍑芥暟浣搣
璇存槑錛?br>
錛?錛変互寮曠敤榪斿洖鍑芥暟鍊鹼紝瀹氫箟鍑芥暟鏃墮渶瑕佸湪鍑芥暟鍚嶅墠鍔?amp;
錛?錛夌敤寮曠敤
榪斿洖涓涓嚱鏁板肩殑鏈澶уソ澶勬槸錛屽湪鍐呭瓨涓笉浜х敓琚繑鍥炲肩殑鍓湰銆?br>
銆愪緥5銆戜互涓嬬▼搴忎腑瀹氫箟浜嗕竴涓櫘閫氱殑鍑芥暟fn1錛堝畠鐢ㄨ繑鍥炲肩殑鏂規硶榪斿洖鍑芥暟鍊鹼級錛屽彟澶栦竴涓嚱鏁癴n2錛屽畠浠ュ紩鐢ㄧ殑鏂規硶榪斿洖鍑芥暟鍊箋?br>
寮曠敤浣滀負榪斿洖鍊鹼紝蹇呴』閬靛畧浠ヤ笅瑙勫垯錛?br>
錛?錛変笉鑳借繑鍥炲眬閮ㄥ彉閲忕殑寮曠敤銆傝繖鏉″彲浠ュ弬鐓ffective C++[1]鐨処tem 31銆備富瑕佸師鍥犳槸灞閮ㄥ彉閲忎細鍦ㄥ嚱鏁拌繑鍥炲悗琚攢姣侊紝鍥犳琚繑鍥炵殑寮曠敤灝辨垚涓轟簡"鏃犳墍鎸?鐨勫紩鐢紝紼嬪簭浼氳繘鍏ユ湭鐭ョ姸鎬併?
錛?錛変笉鑳借繑鍥炲嚱鏁板唴閮╪ew鍒嗛厤鐨勫唴瀛樼殑寮曠敤銆傝繖鏉″彲浠ュ弬鐓ffective C++[1]鐨処tem 31銆傝櫧鐒朵笉瀛樺湪灞閮ㄥ彉閲忕殑琚姩閿姣侀棶棰橈紝鍙浜庤繖縐嶆儏鍐碉紙榪斿洖鍑芥暟鍐呴儴new鍒嗛厤鍐呭瓨鐨勫紩鐢級錛屽張闈復鍏跺畠灝村艾灞闈€備緥濡傦紝琚嚱鏁拌繑鍥炵殑寮曠敤鍙槸浣滀負涓涓復鏃跺彉閲忓嚭鐜幫紝鑰屾病鏈夎璧嬩簣涓涓疄闄呯殑鍙橀噺錛岄偅涔堣繖涓紩鐢ㄦ墍鎸囧悜鐨勭┖闂達紙鐢眓ew鍒嗛厤錛夊氨鏃犳硶閲婃斁錛岄犳垚memory leak銆?br>
錛?錛夊彲浠ヨ繑鍥炵被鎴愬憳鐨勫紩鐢紝浣嗘渶濂芥槸const銆傝繖鏉″師鍒欏彲浠ュ弬鐓ffective C++[1]鐨処tem 30銆備富瑕佸師鍥犳槸褰撳璞$殑灞炴ф槸涓庢煇縐嶄笟鍔¤鍒欙紙business rule錛夌浉鍏寵仈鐨勬椂鍊欙紝鍏惰祴鍊煎父甯鎬笌鏌愪簺鍏跺畠灞炴ф垨鑰呭璞$殑鐘舵佹湁鍏籌紝鍥犳鏈夊繀瑕佸皢璧嬪兼搷浣滃皝瑁呭湪涓涓笟鍔¤鍒欏綋涓傚鏋滃叾瀹冨璞″彲浠ヨ幏寰楄灞炴х殑闈炲父閲忓紩鐢紙鎴栨寚閽堬級錛岄偅涔堝璇ュ睘鎬х殑鍗曠函璧嬪煎氨浼氱牬鍧忎笟鍔¤鍒欑殑瀹屾暣鎬с?br>
錛?錛夊紩鐢ㄤ笌涓浜涙搷浣滅鐨勯噸杞斤細
嫻佹搷浣滅<<鍜?gt;>錛岃繖涓や釜鎿嶄綔絎﹀父甯稿笇鏈涜榪炵畫浣跨敤錛屼緥濡傦細cout << "hello" << endl;銆鍥犳榪欎袱涓搷浣滅鐨勮繑鍥炲煎簲璇ユ槸涓涓粛鐒舵敮鎸佽繖涓や釜鎿嶄綔絎︾殑嫻佸紩鐢ㄣ傚彲閫夌殑鍏跺畠鏂規鍖呮嫭錛氳繑鍥炰竴涓祦瀵硅薄鍜岃繑鍥炰竴涓祦瀵硅薄鎸囬拡銆備絾鏄浜庤繑鍥炰竴涓祦瀵硅薄錛岀▼搴忓繀欏婚噸鏂幫紙鎷瘋礉錛夋瀯閫犱竴涓柊鐨勬祦瀵硅薄錛屼篃灝辨槸璇達紝榪炵畫鐨勪袱涓?lt;<鎿嶄綔絎﹀疄闄呬笂鏄拡瀵逛笉鍚屽璞$殑錛佽繖鏃犳硶璁╀漢鎺ュ彈銆傚浜庤繑鍥炰竴涓祦鎸囬拡鍒欎笉鑳借繛緇嬌鐢?lt;<鎿嶄綔絎︺傚洜姝わ紝榪斿洖涓涓祦瀵硅薄寮曠敤鏄儫涓閫夋嫨銆傝繖涓敮涓閫夋嫨寰堝叧閿紝瀹冭鏄庝簡寮曠敤鐨勯噸瑕佹т互鍙婃棤鍙浛浠fэ紝涔熻榪欏氨鏄疌++璇█涓紩鍏ュ紩鐢ㄨ繖涓蹇電殑鍘熷洜鍚с?璧嬪兼搷浣滅=銆傝繖涓搷浣滅璞℃祦鎿嶄綔絎︿竴鏍鳳紝鏄彲浠ヨ繛緇嬌鐢ㄧ殑錛屼緥濡傦細x = j = 10;鎴栬?x=10)=100;璧嬪兼搷浣滅鐨勮繑鍥炲煎繀欏繪槸涓涓乏鍊鹼紝浠ヤ究鍙互琚戶緇祴鍊箋傚洜姝ゅ紩鐢ㄦ垚浜嗚繖涓搷浣滅鐨勬儫涓榪斿洖鍊奸夋嫨銆?br>
銆愪緥6銆?嫻嬭瘯鐢ㄨ繑鍥炲紩鐢ㄧ殑鍑芥暟鍊間綔涓鴻祴鍊艱〃杈懼紡鐨勫乏鍊箋?br>
錛?錛夊湪鍙﹀鐨勪竴浜涙搷浣滅涓紝鍗村崈涓囦笉鑳借繑鍥炲紩鐢細+-*/ 鍥涘垯榪愮畻絎︺傚畠浠笉鑳借繑鍥炲紩鐢紝Effective C++[1]鐨処tem23璇︾粏鐨勮璁轟簡榪欎釜闂銆備富瑕佸師鍥犳槸榪欏洓涓搷浣滅娌℃湁side effect錛屽洜姝わ紝瀹冧滑蹇呴』鏋勯犱竴涓璞′綔涓鴻繑鍥炲鹼紝鍙夌殑鏂規鍖呮嫭錛氳繑鍥炰竴涓璞°佽繑鍥炰竴涓眬閮ㄥ彉閲忕殑寮曠敤錛岃繑鍥炰竴涓猲ew鍒嗛厤鐨勫璞$殑寮曠敤銆佽繑鍥炰竴涓潤鎬佸璞″紩鐢ㄣ傛牴鎹墠闈㈡彁鍒扮殑寮曠敤浣滀負榪斿洖鍊肩殑涓変釜瑙勫垯錛岀2銆?涓や釜鏂規閮借鍚﹀喅浜嗐傞潤鎬佸璞$殑寮曠敤鍙堝洜涓?(a+b) == (c+d))浼氭案榪滀負true鑰屽鑷撮敊璇傛墍浠ュ彲閫夌殑鍙墿涓嬭繑鍥炰竴涓璞′簡銆?br>
4銆佸紩鐢ㄥ拰澶氭?
寮曠敤鏄櫎鎸囬拡澶栧彟涓涓彲浠ヤ駭鐢熷鎬佹晥鏋滅殑鎵嬫銆傝繖鎰忓懗鐫錛屼竴涓熀綾葷殑寮曠敤鍙互鎸囧悜瀹冪殑媧劇敓綾誨疄渚嬨?br>
銆愪緥7銆戯細
class 銆A;
class 銆B錛歱ublic A{……};
B 銆b;
A 銆&Ref = b; // 鐢ㄦ淳鐢熺被瀵硅薄鍒濆鍖栧熀綾誨璞$殑寮曠敤
Ref 鍙兘鐢ㄦ潵璁塊棶媧劇敓綾誨璞′腑浠庡熀綾葷戶鎵夸笅鏉ョ殑鎴愬憳錛屾槸鍩虹被寮曠敤鎸囧悜媧劇敓綾匯傚鏋淎綾諱腑瀹氫箟鏈夎櫄鍑芥暟錛屽茍涓斿湪B綾諱腑閲嶅啓浜嗚繖涓櫄鍑芥暟錛屽氨鍙互閫氳繃Ref浜х敓澶氭佹晥鏋溿?br>
寮曠敤鎬葷粨
錛?錛夊湪寮曠敤鐨勪嬌鐢ㄤ腑錛屽崟綰粰鏌愪釜鍙橀噺鍙栦釜鍒悕鏄鏃犳剰涔夌殑錛屽紩鐢ㄧ殑鐩殑涓昏鐢ㄤ簬鍦ㄥ嚱鏁板弬鏁頒紶閫掍腑錛岃В鍐沖ぇ鍧楁暟鎹垨瀵硅薄鐨勪紶閫掓晥鐜囧拰絀洪棿涓嶅鎰忕殑闂銆?br>
錛?錛夌敤寮曠敤浼犻掑嚱鏁扮殑鍙傛暟錛岃兘淇濊瘉鍙傛暟浼犻掍腑涓嶄駭鐢熷壇鏈紝鎻愰珮浼犻掔殑鏁堢巼錛屼笖閫氳繃const鐨勪嬌鐢紝淇濊瘉浜嗗紩鐢ㄤ紶閫掔殑瀹夊叏鎬с?br>
錛?錛夊紩鐢ㄤ笌鎸囬拡鐨勫尯鍒槸錛屾寚閽堥氳繃鏌愪釜鎸囬拡鍙橀噺鎸囧悜涓涓璞″悗錛屽瀹冩墍鎸囧悜鐨勫彉閲忛棿鎺ユ搷浣溿傜▼搴忎腑浣跨敤鎸囬拡錛岀▼搴忕殑鍙鎬у樊錛涜屽紩鐢ㄦ湰韜氨鏄洰鏍囧彉閲忕殑鍒悕錛屽寮曠敤鐨勬搷浣滃氨鏄鐩爣鍙橀噺鐨勬搷浣溿?br>
錛?錛変嬌鐢ㄥ紩鐢ㄧ殑鏃舵満銆傛祦鎿嶄綔絎?lt;<鍜?gt;>銆佽祴鍊兼搷浣滅=鐨勮繑鍥炲箋佹嫹璐濇瀯閫犲嚱鏁扮殑鍙傛暟銆佽祴鍊兼搷浣滅=鐨勫弬鏁般佸叾瀹冩儏鍐甸兘鎺ㄨ崘浣跨敤寮曠敤銆?/font>
new鐢ㄦ硶:
1. 寮杈熷崟鍙橀噺鍦板潃絀洪棿
1)new int; //寮杈熶竴涓瓨鏀炬暟緇勭殑瀛樺偍絀洪棿,榪斿洖涓涓寚鍚戣瀛樺偍絀洪棿鐨勫湴鍧.int *a = new int 鍗充負灝嗕竴涓猧nt綾誨瀷鐨勫湴鍧璧嬪肩粰鏁村瀷鎸囬拡a.
2)int *a = new int(5) 浣滅敤鍚屼笂,浣嗘槸鍚屾椂灝嗘暣鏁拌祴鍊間負5
2. 寮杈熸暟緇勭┖闂?/p>
涓緇? int *a = new int[100];寮杈熶竴涓ぇ灝忎負100鐨勬暣鍨嬫暟緇勭┖闂?/p>
浜岀淮: int **a = new int[5][6]
涓夌淮鍙婂叾浠ヤ笂:渚濇綾繪帹.
涓鑸敤娉? new 綾誨瀷 [鍒濆糫
delete鐢ㄦ硶:
1. int *a = new int;
delete a; //閲婃斁鍗曚釜int鐨勭┖闂?/p>
2.int *a = new int[5];
delete [] a; //閲婃斁int鏁扮粍絀洪棿
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
榪愮畻絎ew姣攎alloc瑕佺畝鍗曞浜嗭紝榪欐槸鍥犱負new鍐呯疆浜?/span>sizeof銆佺被鍨嬭漿鎹㈠拰綾誨瀷瀹夊叏媯鏌ュ姛鑳姐傚浜庨潪鍐呴儴鏁版嵁綾誨瀷鐨勫璞¤岃█錛?/span>new鍦ㄥ垱寤哄姩鎬佸璞$殑鍚屾椂瀹屾垚浜嗗垵濮嬪寲宸ヤ綔銆傚鏋滃璞℃湁澶氫釜鏋勯犲嚱鏁幫紝閭d箞new鐨勮鍙ヤ篃鍙互鏈夊縐嶅艦寮忋備緥濡?/span>
class Obj
{
public :
Obj(void); // 鏃犲弬鏁扮殑鏋勯犲嚱鏁?span>
Obj(int x); // 甯︿竴涓弬鏁扮殑鏋勯犲嚱鏁?span>
…
}
void Test(void)
{
Obj *a = new Obj;
Obj *b = new Obj(1); // 鍒濆間負1
…
delete a;
delete b;
}
濡傛灉鐢?span>new鍒涘緩瀵硅薄鏁扮粍錛岄偅涔堝彧鑳戒嬌鐢ㄥ璞$殑鏃犲弬鏁版瀯閫犲嚱鏁般備緥濡?span>
Obj *objects = new Obj[100]; // 鍒涘緩100涓姩鎬佸璞?span>
涓嶈兘鍐欐垚
Obj *objects = new Obj[100](1);// 鍒涘緩100涓姩鎬佸璞$殑鍚屾椂璧嬪垵鍊?span>1
鍦ㄧ敤delete閲婃斁瀵硅薄鏁扮粍鏃訛紝鐣欐剰涓嶈涓簡絎﹀彿‘[]’銆備緥濡?span>
delete []objects; // 姝g‘鐨勭敤娉?span>
delete objects; // 閿欒鐨勭敤娉?span>
鍚庤呯浉褰撲簬delete objects[0]錛屾紡鎺変簡鍙﹀99涓璞°?br>
malloc 鍜宖ree鍙槸鍒嗛厤浜嗙┖闂達紟
鑰宯ew鍜宒elete涓嶄粎鍒嗛厤浜嗙┖闂達紝榪樺畬鎴愪簡瀵規瀯閫犲嚱鏁板拰鏋愯喘鍑芥暟鐨勮皟鐢紝褰撶劧榪欐槸瀵瑰璞¤岃█銆?
涓よ呭湪瀵瑰熀鏈暟鎹被鍨嬫搷浣滄椂鍊欙紝娌℃湁澶氬ぇ鍖哄埆錛屽尯鍒湪浜庡瀵硅薄榪涜鎿嶄綔鏃躲俶alloc鍜宖ree鏄嚱鏁?浣唍ew鍜宒elete鏄搷浣滅
using namespace std;
void display_bits(unsigned u)
{
int t;
for(t = 128; t >= 1; t /= 2)\
{
if(u&t) cout<<"1 ";
else cout<<"0 ";
}
cout<<endl;
}
int main()
{
display_bits(10);
return 0;
}
stu_average(a);
subject_average(a);
return 0;
}
void stu_average(int (*p)[6])
{
int sum=0;
int i,j;
for (i=0;i<n;i++)
{
cout<<*(*(p+i)+0)<<" ";
for (sum=0,j=1;j<6;j++)
{
sum+=*(*(p+i)+j);
cout<<setiosflags(ios::fixed)<<setprecision(1);
cout<<*(*(p+i)+j)<<" ";
}
cout<<sum/5.0<<endl;
}
}
void subject_average(int (*p)[6])
{
int i,j;
int sum=0;
for (j=1;j<6;j++)
{
for (i=0,sum=0;i<n;i++)
{
sum+=*(*(p+i)+j);
}
cout<<setiosflags(ios::fixed)<<setprecision(1);
cout<<(float)sum/n<<" ";
}
cout<<endl;
}
璋佽兘緇欐垜璁蹭竴涓嬮噷闈㈢殑鎸囬拡鍝︼紵錛燂紵錛燂紵