Because if it's not by reference, it's by value. To do that you make a copy, and to do that you call the copy constructor. But to do that, we need to need to make a new value, so we call the copy constructor, and so on...
(You would have infinite recursion because "to make a copy, you need to make a copy".)
]]>C璇█鑾峰彇鏂囦歡澶у皬http://www.shnenglu.com/xiaowugui/archive/2010/10/22/130863.html灝忎箤榫?/dc:creator>灝忎箤榫?/author>Fri, 22 Oct 2010 03:22:00 GMThttp://www.shnenglu.com/xiaowugui/archive/2010/10/22/130863.htmlhttp://www.shnenglu.com/xiaowugui/comments/130863.htmlhttp://www.shnenglu.com/xiaowugui/archive/2010/10/22/130863.html#Feedback1http://www.shnenglu.com/xiaowugui/comments/commentRss/130863.htmlhttp://www.shnenglu.com/xiaowugui/services/trackbacks/130863.html 鍥炴潵鏌ヤ簡涓嬶紝鍘熸潵鏄痜tell錛屾?zhèn)插墽鍟婂Q屼互鍓嶆病鐢ㄨ繃錛丮SDN涓奻tell鐨勫姛鑳藉涓嬶細(xì)Gets the current position of a file pointer銆傚啓浜嗘浠g爜嫻嬭瘯浜嗕笅錛屼唬鐮佸涓嬶細(xì)
/** * @brief Append a C string. * @param s The C string to append. * @return Reference to this string. */ basic_string& operator+=(const _CharT* __s) { returnthis->append(__s); }
/** * @brief Append a character. * @param s The character to append. * @return Reference to this string. */ basic_string& operator+=(_CharT __c) { returnthis->append(size_type(1), __c); }
/** * @brief Copy contents of @a s into this string. * @param s Source null-terminated string. */ basic_string& operator=(const _CharT* __s) { this->assign(__s); return*this; }
/** * @brief Set value to string of length 1. * @param c Source character. * * Assigning to a character makes this string length 1 and * (*this)[0] == @a c. */ basic_string& operator=(_CharT __c) { this->assign(1, __c); return*this; }
// operator+ /** * @brief Concatenate two strings. * @param lhs First string. * @param rhs Last string. * @return New string with value of @a lhs followed by @a rhs. */ template<typename _CharT, typename _Traits, typename _Alloc> basic_string<_CharT, _Traits, _Alloc> operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) { basic_string<_CharT, _Traits, _Alloc> __str(__lhs); __str.append(__rhs); return __str; }
/** * @brief Concatenate C string and string. * @param lhs First string. * @param rhs Last string. * @return New string with value of @a lhs followed by @a rhs. */ template<typename _CharT, typename _Traits, typename _Alloc> basic_string<_CharT,_Traits,_Alloc> operator+(const _CharT* __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
/** * @brief Concatenate character and string. * @param lhs First string. * @param rhs Last string. * @return New string with @a lhs followed by @a rhs. */ template<typename _CharT, typename _Traits, typename _Alloc> basic_string<_CharT,_Traits,_Alloc> operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
/** * @brief Concatenate string and C string. * @param lhs First string. * @param rhs Last string. * @return New string with @a lhs followed by @a rhs. */ template<typename _CharT, typename _Traits, typename _Alloc> inline basic_string<_CharT, _Traits, _Alloc> operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, const _CharT* __rhs) { basic_string<_CharT, _Traits, _Alloc> __str(__lhs); __str.append(__rhs); return __str; }
/** * @brief Concatenate string and character. * @param lhs First string. * @param rhs Last string. * @return New string with @a lhs followed by @a rhs. */ template<typename _CharT, typename _Traits, typename _Alloc> inline basic_string<_CharT, _Traits, _Alloc> operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) { typedef basic_string<_CharT, _Traits, _Alloc> __string_type; typedef typename __string_type::size_type __size_type; __string_type __str(__lhs); __str.append(__size_type(1), __rhs); return __str; }
杈撳嚭緇撴灉鏃? 7 4 7 鏃㈢劧榪欐牱鐨勮瘽,閭d箞鏁扮粍鍚嶆槸鍙橀噺榪樻槸甯擱噺鍛?鏁扮粍鍚嶅疄璐ㄤ笂鏄繖涓暟緇勭殑棣栧湴鍧錛屼竴鏃︾郴緇熷紑杈熶簡榪欏潡鍐呭瓨錛岄偅涔堣繖涓唴瀛樼殑棣栧湴鍧灝變笉鑳芥敼鍙橈紝鎵浠ワ紝瀵規(guī)暟緇勫悕鐨勮祴鍊艱偗瀹氭槸涓嶅厑璁哥殑銆傛暟緇勫悕絳夊悓浜庡父閲忥紝浣嗘槸榪樻湁娌℃湁鏁扮粍鍚嶅氨鏄父閲忕殑璇存硶銆傝繖灝辮鏄庝簡鏁扮粍鍚嶇粷涓嶆槸鍙橀噺,褰撶劧涔熶笉鏄暟緇勫厓绱犱簡.鍥犳瀵規(guī)暟緇勫悕鍙栧湴鍧,瑕佷箞鏄湭瀹氫箟,瑕佷箞鏄潪娉曠殑.瀵瑰瓧絎︿覆甯擱噺鍙栧湴鍧,寰堝緙栬瘧鍣ㄩ兘鍙互閫氳繃,鍙槸璀﹀憡涓鐣?鍥犳瀵逛簬鏁扮粍str[],str鍜?amp;str鏄悓涓涓肩殑璇存硶鏄笉瀵?鍥犱負(fù)&str榪欎釜鏈韓涓嶅悎娉曟垨鏈畾涔夌殑. 榪樻湁浠栬:鎵浠ユ暟緇勫拰鎸囬拡榪樻槸鏈夊尯鍒殑錛屽彧鏄紪璇戝櫒瀵規(guī)寚閽堢殑澶勭悊鏄寜鐓у鐞嗘暟緇勭殑鏂瑰紡鏉ュ鐞嗙殑銆傛暟緇勫綋鐒跺拰鎸囬拡鏈夊尯鍒簡.鏁扮粍鍚嶄笉鏄彉閲?鑰屾寚閽堟槸.緙栬瘧鍣ㄥ鎸囬拡鐨勫鐞嗘槸鎸夌収澶勭悊鏁扮粍鐨勬柟寮忔潵澶勭悊鐨勫悧?閭d箞涓轟粈涔堢敤鎸囬拡緙栧啓鐨勭▼搴忔瘮鏁扮粍鐨勫揩? The C Programming Language P98:鍦ㄨ綆楁暟緇勫厓绱燼[i]鐨勫兼椂,C璇█瀹為檯涓婂厛灝嗗叾杞崲涓?(a+i)鐨勫艦寮?鐒跺悗鍐嶈繘琛屾眰鍊?榪欏氨璇存槑浜嗙紪璇戝櫒瀵規(guī)暟緇勭殑澶勭悊鏄寜鐓ф寚閽堢殑鏂瑰紡鏉ュ鐞嗙殑.鍚屾椂涔熻鏄庝簡涓轟粈涔堢敤鎸囬拡緙栧啓鐨勭▼搴忔瘮鐢ㄦ暟緇勭紪鍐欑殑蹇?
]]>緇檌nt璧嬫渶灝忓奸棶棰?/title>http://www.shnenglu.com/xiaowugui/archive/2008/08/01/57775.html灝忎箤榫?/dc:creator>灝忎箤榫?/author>Fri, 01 Aug 2008 08:40:00 GMThttp://www.shnenglu.com/xiaowugui/archive/2008/08/01/57775.htmlhttp://www.shnenglu.com/xiaowugui/comments/57775.htmlhttp://www.shnenglu.com/xiaowugui/archive/2008/08/01/57775.html#Feedback0http://www.shnenglu.com/xiaowugui/comments/commentRss/57775.htmlhttp://www.shnenglu.com/xiaowugui/services/trackbacks/57775.html
int n =-2147483648;
濡傛綆鍗曠殑涓鍙ヤ唬鐮侊紝灞呯劧鍑虹幇浜嗚鍛婏紵-2147483648鏄?2浣峣nt綾誨瀷鍙互瀛樺偍鐨勬渶灝忔暣鍨嬪鹼紝涓轟粈涔堜細(xì)鍑洪」璀﹀憡鍛€傚湪VC++6.0鎺у埗鍙扮▼搴忎笅鍑虹幇濡備笅璀﹀憡錛歸arning C4146: unary minus operator applied to unsigned type, result still unsigned銆傚湪C-Free涓嚭鐜幫細(xì)c:55: warning: decimal constant is so large that it is unsigned銆?br> 涓婄綉鏌ヤ簡涓嬶紝鍙戠幇浜嗗師鍥狅細(xì) 涓鍏冭礋榪愮畻絎﹀簲鐢ㄤ簬鏃犵鍙風(fēng)被鍨嬶紝緇撴灉浠嶄負(fù)鏃犵鍙風(fēng)被鍨嬨傛棤絎﹀彿綾誨瀷鍙兘淇濆瓨闈炶礋鍊鹼紝鎵浠ヤ竴鍏冭礋錛堥潪錛夊簲鐢ㄤ簬鏃犵鍙風(fēng)被鍨嬫椂閫氬父鏃犳剰涔夈傛搷浣滄暟鍜岀粨鏋滈兘鏄潪璐熺殑銆?nbsp; 瀹為檯涓婏紝褰撶▼搴忓憳璇曞浘琛ㄨ揪鏈灝忔暣鏁板?2147483648 鏃訛紝鍙戠敓姝ら棶棰樸傝鍊間笉鑳藉啓涓?2147483648錛屽洜涓鴻〃杈懼紡澶勭悊鍒嗕袱涓楠わ細(xì) 璁$畻鏁板瓧2147483648銆傚洜涓?147483648 澶т簬鏈澶ф暣鏁板?147483647錛屾墍浠ュ叾綾誨瀷涓嶆槸int錛岃屾槸unsigned int銆?nbsp; 灝嗕竴鍏冭礋搴旂敤浜庤鍊鹼紝寰楀埌鏃犵鍙風(fēng)粨鏋滐紝璇ョ粨鏋滅宸ф槸 2147483648銆傛棤絎﹀彿綾誨瀷鐨勭粨鏋滃彲鑳藉鑷存剰澶栬涓恒傚鏋滃湪姣旇緝涓嬌鐢ㄨ緇撴灉錛屽垯鍙嬌鐢ㄦ棤絎﹀彿姣旇緝錛岃屼笉鑳藉嚭鐜板彟涓涓搷浣滄暟鏄?int 鏃躲傝繖瑙i噴浜嗕笅闈㈢殑紺轟緥紼嬪簭鍙緭鍑轟竴琛岀殑鍘熷洜銆?nbsp; 棰勬湡鐨勭浜岃涓猴細(xì)1 is greater than the most negative int錛屼絾鏈緭鍑猴紝鍥犱負(fù)((unsigned int)1) > 2147483648涓哄亣銆?nbsp;
#include <stdio.h> main() {
check(-10); check(1);
return0; }
void check(int i) { if (i >-2147483648) printf("%d is greater than the most negative int\n", i); }
鏍規(guī)嵁C鏍囧噯鐨勮瀹氾紝鏋氫婦甯擱噺鐨勭被鍨嬩負(fù)int錛屾灇涓懼彉閲忕殑綾誨瀷搴旇涓巆har銆佹湁絎﹀彿鎴栨棤絎﹀彿鏁村瀷鍏煎銆傚洜姝わ紝鏋氫婦鍙橀噺鍙互鎺ュ彈 char銆佹湁絎﹀彿鎴栨棤絎﹀彿鏁村瀷鏁幫紝鑰屼笉闄愪簬浠呬粠姝ゆ灇涓劇被鍨嬫墍瀹氫箟鐨勬灇涓懼父閲忎腑鍙栧箋傜敱浜庝笂榪板師鍥狅紝鍦–瑾炶█涓棤娉曚粠瑾炴硶涓婁繚璇佹灇涓懼彉閲忓彧鑳藉湪瀹氫箟鐨勬灇涓炬垚鍛樹腑鍙栧鹼紝鍙兘鐢辯▼搴忓憳鑷韓淇濊瘉涓嶄嬌鐢ㄩ櫎鏋氫婦鎴愬憳涔嬪鐨勫箋?br> 鍏充簬閫欎竴鐐癸紝寰堝浠嬬粛C璇█鐨勪功涓婃垨鑰呰祫鏂欎笂鐨勬弿榪版槸涓嶆紜殑錛屽簲璇ュ姞浠ユ敞鎰忋?br> 浣嗘槸錛屽鏋滅粰鏋氫婦鍙橀噺璧嬫灇涓炬垚鍛樹箣澶栫殑鍊鹼紝鏈夌殑緙栬瘧鍣ㄥ彲鑳戒細(xì)瀵規(guī)浜х敓璀﹀憡錛屾湁鐨勫垯涓嶆渻銆傚洜涓鴻繖縐嶈涓轟笉榪濆弽C鏍囧噯鐨勮瀹氾紝緙栬瘧鍣ㄥ姝ゅ浣曞弽搴旈兘鏄湁閬撶悊鐨勩?br> 鐒惰屽浜嶤++鏉ヨ錛岀紪璇戝櫒浼?xì)绂佹缁欐灇鋴D鍙橀噺璧嬩簣鏋氫婦鎴愬憳涔嬪鐨勫箋傝繖鏄洜涓篊++鏄竴縐嶅己綾誨瀷璇█錛屾灇涓劇被鍨嬩笉絳夊悓浜?int 絳夊叾瀹冪被鍨嬨傝櫧鐒舵灇涓劇被鍨嬪彲浠ラ殣寮忚漿鍖栦負(fù) int 絳夌被鍨嬶紝浣嗘槸 int 絳夌被鍨嬪嵈涓嶈兘鑷姩杞寲涓烘灇涓劇被鍨嬶紝闄ら潪浣跨敤寮哄埗綾誨瀷杞寲銆傚洜姝わ紝濡傛灉涓嶄嬌鐢ㄥ己鍒剁被鍨嬭漿鍖栫殑璇濓紝緇欐灇涓懼彉閲忚祴鍊煎垯鍙兘浠庢灇涓炬垚鍛樹腑閫夋嫨銆傚浜庢灇涓劇被鍨嬭閬垮厤浣跨敤寮哄埗綾誨瀷杞崲銆傚師鍥犲涓嬶細(xì)
The C++ Programming Language涓婅: 濡傛灉鏌愪釜鏋氫婦涓墍鏈夋灇涓懼奸潪璐?鏋氫婦鐨勮〃紺鴻寖鍥翠負(fù)[0 : 2^k-1];鍏朵腑2^K鏄嬌鎵鏈夋灇涓炬垚鍛樹綅浜庢鑼冨洿鍐呯殑鏈灝忕殑2鐨勫箓;濡傛灉鏄礋鐨?灝辨槸[-2^k : 2^k-1]銆?鍥犳瀵逛竴涓粰瀹氱殑鏁存暟鍊鹼紝濡傛灉浣跨敤寮哄埗綾誨瀷杞崲錛岃屽叾鍊煎張涓嶅湪鏋氫婦鐨勮〃紺鴻寖鍥翠互鍐咃紝鍏惰涓烘槸鏈畾涔夌殑銆?br>
// 鍖呭惈澶存枃浠?nbsp; #include <iostream.h>
int main() { enum months{JAN =1, FEB, MAR};
//enum months a = 1; //cannot convert from 'const int' to 'enum main::months' enum months a = (enum months)1; cout <<"a: "<< a << endl; //杈撳嚭: a: 1 enum months b = (enum months)10; cout <<"b: "<< b << endl; //杈撳嚭: b: 10 铏界劧杈撳嚭10錛屼絾緇撴灉鏄湭瀹氫箟鐨勶紝鍥犱負(fù)姝ゆ灇涓劇殑琛ㄧず鑼冨洿涓猴細(xì)0锝? return0; }