锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
{
FILE *fp=fopen("1.txt","r+");
fputc('x',fp);
fputc('x',fp);
fputc('x',fp);
return 0;
}
{
FILE *fp=fopen("1.txt","rb+");
char c=fgetc(fp);
fputc('x',fp);
fputc('x',fp);
fputc('x',fp);
return 0;
}
銆奤nix鐜楂樼駭緙栫▼銆嬪湪浣跨敤璇誨啓鏂瑰紡鎵撳紑鏂囦歡鏃訛紙type涓殑+鍙鳳級錛岃緭鍑虹殑鍚庨潰涓嶈兘鐩存帴璺熻緭鍏ワ紝杈撳叆鐨勫悗闈篃涓嶈兘鐩存帴璺熻緭鍑猴紝鍚﹀垯鍙兘浼氬嚭閿欍傚鏋滈渶瑕佽緭鍑鴻緭鍏ョ浉榪烇紝鍒欎腑闂?
闇璋冪敤fflush,fseek,fsetpos鎴杛ewind絳夋搷浣溿?br> 鏃㈢劧榪欐牱錛岄偅鎴戜滑璇曚竴涓嬶紝鐪嬬湅鑳戒笉鑳借В鍐抽棶棰橈紝鍦ㄤ笂闈唬鐮佷腑fgetc鍜宖putc涓棿鍔犲叆
fgetpos(fp,&pos);
fsetpos(fp,&pos);
]]>
alias g++='g++ -Wall'
榪欐牱浠ュ悗姣忔浣跨敤gcc/g++鐨勬椂鍊欏畠灝辮嚜鍔ㄥ惎鐢?Wall閫夐」浜?br>
]]>
http://lmlf001.blog.sohu.com/
]]>
澶氶噸緇ф壙
鍓嶉潰鎴戜滑浠嬬粛鐨勬淳鐢熺被鍙湁涓涓熀綾伙紝縐頒負鍗曞熀媧劇敓鎴栧崟涓緇ф壙銆傚湪瀹為檯榪愮敤涓紝鎴戜滑緇忓父闇瑕佹淳鐢熺被鍚屾椂鍏鋒湁澶氫釜鍩虹被錛岃繖縐嶆柟娉曠О涓哄鍩烘淳鐢熸垨澶氶噸緇ф壙銆?/span>
2.1
澶氶噸緇ф壙鐨勫0鏄庯細
鍦?/span>
C++
涓紝澹版槑鍏鋒湁涓や釜浠ヤ笂鍩虹被鐨勬淳鐢熺被涓庡0鏄庡崟鍩烘淳鐢熺被鐨勫艦寮忕被浼鹼紝鍙渶灝嗚緇ф壙鐨勫涓熀綾葷敤閫楀彿鍒嗗紑鍗沖彲銆?/span>
鍦ㄥ閲嶇戶鎵夸腑錛屽叕鏈夋淳鐢熷拰縐佹湁媧劇敓瀵逛簬鍩虹被鎴愬憳鍦ㄦ淳鐢熺被鐨勫彲璁塊棶鎬т笌鍗曠戶鎵跨殑瑙勫垯鐩稿悓銆?/span>
鍙﹀錛屽鍩虹被鎴愬憳鐨勮闂繀欏繪槸鏃犱簩涔夌殑錛岃嫢涓や釜鍩虹被涓叿鏈夊悓鍚嶇殑鏁版嵁鎴愬憳鎴栨垚鍛樺嚱鏁幫紝浣跨敤鎴愬憳鍚嶉檺瀹氭潵娑堥櫎浜屼箟鎬э紝鑻ユ淳鐢熺被涓柊澧炴垚鍛樻垨鎴愬憳鍑芥暟涓庡熀綾繪垚鍛樻垨鎴愬憳鍑芥暟鍚屽悕錛屽垯媧劇敓綾諱細瑕嗙洊澶栧眰鍚屽悕鎴愬憳錛屼篃欏諱嬌鐢ㄤ綔鐢ㄥ煙鍒嗚鯨絎︺?/span>
2.2
澶氶噸緇ф壙鐨勬瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟錛?/span>
澶氶噸緇ф壙鐨勬瀯閫犲嚱鏁扮殑瀹氫箟褰㈠紡涓庡崟緇ф壙鏋勯犲嚱鏁扮殑瀹氫箟褰㈠紡綾諱技錛屽彧鏈?/span>
n
涓熀綾葷殑鏋勯犲嚱鏁頒箣闂寸敤鈥滐紝鈥濆垎闅斻?/span>
澶氶噸緇ф壙鐨勬瀯閫犲嚱鏁扮殑鎵ц欏哄簭涓庡崟緇ф壙鏋勯犲嚱鏁扮殑鎵ц欏哄簭鐩稿悓錛屼篃鏄伒寰厛鎵ц鍩虹被鐨勬瀯閫犲嚱鏁幫紝鍐嶆墽琛屽璞℃垚鍛樼殑鏋勯犲嚱鏁幫紝鏈鍚庢墽琛屾淳鐢熺被鏋勯犲嚱鏁扮殑鍘熷垯銆傚湪澶氫釜鍩虹被涔嬮棿錛屽垯涓ユ牸鎸夌収媧劇敓綾誨0鏄庢槸浠庡乏鍒板彸鐨勯『搴忔潵鎺掑垪鍏堝悗銆傝屾瀽鏋勫嚱鏁扮殑鎵ц欏哄簭涓庢瀯閫犲嚱鏁扮殑鎵ц欏哄簭鐩稿弽銆?/span>
2.3
铏氬熀綾?/span>
:
濡傛灉鏌愪釜媧劇敓綾葷殑閮ㄥ垎鎴栧叏閮ㄧ洿鎺ュ熀綾繪槸浠庡彟涓涓叡鍚岀殑鍩虹被媧劇敓鑰屾潵錛屽湪榪欎簺鍩虹被涓紝浠庝笂涓綰у熀綾葷戶鎵挎潵鐨勬垚鍛樺氨鏈夌浉鍚岀殑鍚嶇О錛屽垯鍦ㄨ繖涓淳鐢熺被涓闂繖涓叡鍚岀殑鍩虹被涓殑鎴愬憳鏃訛紝鍙兘浼氫駭鐢熶簩涔夋э紝姝ゆ椂錛屽彲瀹氫箟铏氬熀綾匯傝繖灝辮姹傚湪鍏剁洿鎺ュ熀綾葷殑瀹氫箟涓紝浣跨敤鍏抽敭瀛?/span>
virtual
灝嗛偅涓叡鍚岀殑鍩虹被瀹氫箟涓鴻櫄鍩虹被錛屽叾璇硶褰㈠紡濡備笅錛?/span>
聽聽聽聽聽聽 class聽
媧劇敓綾誨悕錛?/span>
聽 virtual
媧劇敓鏂瑰紡
鍩虹被
聽聽聽
铏氬熀綾葷殑鍒濆鍖栦笌涓鑸殑澶氶噸緇ф壙鐨勫垵濮嬪寲鍦ㄨ娉曚笂鏄竴鏍風殑
錛屼絾鏋勯犲嚱鏁扮殑璋冪敤欏哄簭涓嶅悓錛岃櫄鍩虹被鏋勯犲嚱鏁扮殑璋冪敤欏哄簭鏄繖鏍瘋瀹氱殑錛?/span>
1)
鍦ㄥ悓涓灞傛涓紝鍏堣皟鐢ㄨ櫄鍩虹被鐨勬瀯閫犲嚱鏁幫紝鎺ヤ笅鏉ヤ緷嬈℃槸闈炶櫄鍩虹被鐨勬瀯閫犲嚱鏁幫紝瀵硅薄鎴愬憳鐨勬瀯閫犲嚱鏁幫紝媧劇敓綾葷殑鏋勯犲嚱鏁般?/span>
2)
鑻ュ悓涓灞傛涓寘鍚涓櫄鍩虹被錛岃繖浜涜櫄鍩虹被鐨勬瀯閫犲嚱鏁版寜瀵逛粬浠鏄庣殑鍏堝悗嬈″簭璋冪敤
3)
鑻ヨ櫄鍩虹被鐢遍潪铏氬熀綾繪淳鐢熻屾潵錛屽垯浠嶇劧鍏堣皟鐢ㄥ熀綾繪瀯閫犲嚱鏁幫紝鍐嶈皟鐢ㄦ淳鐢熺被鏋勯犲嚱鏁般?br />
]]>
volatile鏄痗/c++涓竴涓矞涓轟漢鐭ョ殑鍏抽敭瀛?璇ュ叧閿瓧鍛婅瘔緙栬瘧鍣ㄤ笉瑕佹寔鏈夊彉閲忕殑涓存椂鎷瘋礉,瀹冨彲浠ラ傜敤浜庡熀紜綾誨瀷
濡傦細int,char,long......涔熼傜敤浜嶤鐨勭粨鏋勫拰C++鐨勭被銆傚綋瀵圭粨鏋勬垨鑰呯被瀵硅薄浣跨敤volatile淇グ鐨勬椂鍊欙紝緇撴瀯鎴栬?br />綾葷殑鎵鏈夋垚鍛橀兘浼氳瑙嗕負volatile.
浣跨敤volatile騫朵笉浼氬惁瀹氬CRITICAL_SECTION,Mutex,Event絳夊悓姝ュ璞$殑闇瑕?br />渚嬪錛?br />int i;
i = i + 3;
鏃犺濡備綍錛屾繪槸浼氭湁涓灝忔鏃墮棿錛宨浼氳鏀懼湪涓涓瘎瀛樺櫒涓紝鍥犱負綆楁湳榪愮畻鍙兘鍦ㄥ瘎瀛樺櫒涓繘琛屻備竴鑸潵璇達紝volatitle
鍏抽敭瀛楅傜敤浜庤涓庤涔嬮棿錛岃屼笉鏄斁鍦ㄨ鍐呫?/font>
鎴戜滑鍏堟潵瀹炵幇涓涓畝鍗曠殑鍑芥暟錛屾潵瑙傚療涓涓嬬敱緙栬瘧鍣ㄤ駭鐢熷嚭鏉ョ殑姹囩紪浠g爜涓殑涓嶈凍涔嬪錛屽茍瑙傚療volatile鍏抽敭瀛楀浣曚慨姝?br />榪欎釜涓嶈凍涔嬪銆傚湪榪欎釜鍑芥暟浣撳唴瀛樺湪涓涓猙usy loop(鎵璋揵usy loop涔熷彨鍋歜usy waits,鏄竴縐嶉珮搴︽氮璐笴PU鏃墮棿鐨勫驚鐜柟娉?
void getKey(char* pch)
{
聽while (*pch == 0)
聽聽;
}
褰撲綘鍦╒C寮鍙戠幆澧冧腑灝嗘渶浼樺寲閫夐」閮藉叧闂箣鍚庯紝緙栬瘧榪欎釜紼嬪簭錛屽皢鑾峰緱浠ヤ笅緇撴灉(姹囩紪浠g爜)
;聽聽聽聽聽聽 while (*pch == 0)
$L27
聽; Load the address stored in pch
聽mov eax, DWORD PTR _pch$[ebp]
聽; Load the character into the EAX register
聽movsx eax, BYTE PTR [eax]
聽; Compare the value to zero
聽test eax, eax
聽; If not zero, exit loop
聽jne $L28
聽;
聽jmp $L27
$L28
;}
榪欐娌℃湁浼樺寲鐨勪唬鐮佷笉鏂殑杞藉叆閫傚綋鐨勫湴鍧錛岃澆鍏ュ湴鍧涓殑鍐呭錛屾祴璇曠粨鏋溿傛晥鐜囩浉褰撶殑浣庯紝浣嗘槸緇撴灉闈炲父鍑嗙‘
鐜板湪鎴戜滑鍐嶆潵鐪嬬湅灝嗙紪璇戝櫒鐨勬墍鏈夋渶浼樺寲閫夐」寮鍏抽兘鎵撳紑浠ュ悗錛岄噸鏂扮紪璇戠▼搴忥紝鐢熸垚鐨勬眹緙栦唬鐮侊紝鍜屼笂闈㈢殑浠g爜
姣旇緝涓涓嬫湁浠涔堜笉鍚?br />;{
聽; Load the address stored in pch
聽mov eax, DWORD PTR _pch$[esp-4]
聽; Load the character into the AL register
聽movsx al, BYTE PTR [eax]
;聽while (*pch == 0)
聽; Compare the value in the AL register to zero
聽test al, al
聽; If still zero, try again
聽je SHORT $L84
聽;
;}
浠庝唬鐮佺殑闀垮害灝卞彲浠ョ湅鍑烘潵錛屾瘮娌℃湁浼樺寲鐨勬儏鍐佃鐭殑澶氥傞渶瑕佹敞鎰忕殑鏄紪璇戝櫒鎶奙OV鎸囦護鏀懼埌浜嗗驚鐜箣澶栥傝繖鍦?br />鍗曠嚎紼嬩腑鏄竴涓潪甯稿ソ鐨勪紭鍖栵紝浣嗘槸錛屽湪澶氱嚎紼嬪簲鐢ㄧ▼搴忎腑錛屽鏋滃彟涓涓嚎紼嬫敼鍙樹簡鍙橀噺鐨勫鹼紝鍒欏驚鐜案榪滀笉浼?br />緇撴潫銆傝嫻嬭瘯鐨勫兼案榪滆鏀懼湪瀵勫瓨鍣ㄤ腑錛屾墍浠ヨ孌典唬鐮佸湪澶氱嚎紼嬬殑鎯呭喌涓嬶紝瀛樺湪涓涓法澶х殑BUG銆傝В鍐蟲柟娉曟槸閲嶆柊
鍐欎竴嬈etKey鍑芥暟錛屽茍鎶婂弬鏁皃ch澹版槑涓簐olatile,浠g爜濡備笅錛?/font>
void getKey(volatile char* pch)
{
聽while (*pch == 0)
聽聽;
}
榪欐鐨勪慨鏀瑰浜庨潪鏈浼樺寲鐨勭増鏈病鏈変換浣曞獎鍝嶏紝涓嬮潰璇風湅鏈浼樺寲鍚庣殑緇撴灉錛?/font>
;{
聽; Load the address stored in pch
聽mov eax, DWORD PTR _pch$[esp-4]
;聽聽聽聽聽聽 while (*pch == 0)
$L84:
聽; Directly compare the value to zero
聽cmp BYTE PTR [eax], 0
聽; If still zero, try again
聽je SHORT $L84
聽;
;}
榪欐鐨勪慨鏀圭粨鏋滄瘮杈冨畬緹庯紝鍦板潃涓嶄細鏀瑰彉錛屾墍浠ュ湴鍧澹版槑琚Щ鍔ㄥ埌寰幆涔嬪銆傚湴鍧鍐呭鏄痸olatile,鎵浠ユ瘡嬈″驚鐜?br />涔嬩腑瀹冧笉鏂殑琚噸鏂版鏌ャ?/font>
鎶婁竴涓猚onst volatile鍙橀噺浣滀負鍙傛暟浼犻掔粰鍑芥暟鏄悎娉曠殑銆傚姝ょ殑澹版槑鎰忓懗鐫鍑芥暟涓嶈兘鏀瑰彉鍙橀噺鐨勫鹼紝浣嗘槸鍙橀噺鐨?br />鍊煎嵈鍙互琚彟涓涓嚎紼嬪湪浠諱綍鏃墮棿鏀瑰彉鎺夈?/font>
鍙︼細
濡傛灉鍦ㄤ竴涓綰跨▼紼嬪簭涓兂鍦ㄤ袱涓嚱鏁頒腑鍏變韓涓涓眬閮ㄥ彉閲忥紝闇鎶婂彉閲忓0鏄庝負volatile綾誨瀷
渚嬪錛?p>涓婁緥涓紝鍑芥暟f1()涓殑寰幆鎺у埗鏉′歡姘歌繙涓虹湡錛屽瓧絎︿覆"helo"寰椾笉鍒版墦鍗般?/p>
濡傛灉鎶奻1()鐨勫弬鏁扮被鍨嬫敼涓簐olatitle void *x,鍒欐墦鍗板懡浠よ瀹炵幇銆?br />
濡傛灉涓涓被鐨勬垚鍛樺嚱鏁拌澹版槑涓篶onst綾誨瀷,琛ㄧず璇ュ嚱鏁頒笉浼氭敼鍙樺璞$殑鐘舵?涔熷氨鏄?br />璇ュ嚱鏁頒笉浼氫慨鏀圭被鐨勯潪闈欐佹暟鎹垚鍛?浣嗘槸鏈変簺鏃跺欓渶瑕佸湪璇ョ被鍑芥暟涓綾葷殑鏁版嵁鎴愬憳
榪涜璧嬪?榪欎釜鏃跺欏氨闇瑕佺敤鍒?span class="hilite1">mutable鍏抽敭瀛椾簡
mutable鍏抽敭瀛楁彁紺虹紪璇戝櫒璇ュ彉閲忓彲浠ヨ綾葷殑const鍑芥暟淇敼
In C++ it is possible to declare constructors for a class, taking a
single parameter, and use those constructors for doing type conversion.
For example:
class聽A聽{
public:
聽聽聽聽聽聽聽 A(int);
};
void聽f(A)聽{}
void聽g()
{
聽聽聽聽聽聽聽聽 A聽a1聽=聽37;
聽聽聽聽聽聽聽聽 A聽a2聽=聽A(47);
聽聽聽聽聽聽聽聽 A聽a3(57);
聽聽聽聽聽聽聽聽 a1聽=聽67;
聽聽聽聽聽聽聽聽 f(77);
}
A declaration like:
聽A a1 = 37;
says to call the A(int) constructor to create an A object from the integer value. Such a constructor is called a "converting constructor".
However, this type of implicit conversion can
be confusing, and there is a way of disabling it, using a new keyword
"explicit" in the constructor declaration:
Using the explicit keyword, a constructor is declared to beclass聽A聽{
public:
聽聽聽聽聽聽聽 explicit聽A(int);
};
void聽f(A)聽{}
void聽g()
{
聽聽聽聽聽聽聽聽聽 A聽a1聽=聽37;聽聽聽聽聽聽//聽illegal
聽聽聽聽聽聽聽聽聽 A聽a2聽=聽A(47);聽聽聽//聽OK
聽聽聽聽聽聽聽聽聽 A聽a3(57);聽聽聽聽聽聽聽//聽OK
聽聽聽聽聽聽聽聽聽 a1聽=聽67;聽聽聽聽聽聽聽聽//聽illegal
聽聽聽聽聽聽聽聽聽 f(77);聽聽聽聽聽聽聽聽聽聽//聽illegal
}
class聽A聽{
public:
聽聽聽聽聽聽聽聽explicit聽A(int);
聽聽聽聽聽聽聽聽};
void聽f(A)聽{}
void聽g()
{
聽聽聽聽聽聽聽聽A聽a1聽=聽A(37);
聽聽聽聽聽聽聽聽A聽a2聽=聽A(47);
聽聽聽聽聽聽聽聽A聽a3(57);
聽聽聽聽聽聽聽聽a1聽=聽A(67);
聽聽聽聽聽聽聽聽f(A(77));
}
Note that an expression such as:
A(47)
is closely related to function-style casts supported by C++. For example:
double d = 12.34;
int i = int(d);
榪欐槸More Effecitve C++閲岀殑絎簩鏉″綾誨瀷杞崲璁茬殑寰堝ソ錛屼篃寰堝熀紜濂芥噦銆?br />Item
M2錛氬敖閲忎嬌鐢–++椋庢牸鐨勭被鍨嬭漿鎹?br />浠旂粏鎯蟲兂鍦頒綅鍗戣幢鐨勭被鍨嬭漿鎹㈠姛鑳斤紙cast錛夛紝鍏跺湪紼嬪簭璁捐涓殑鍦頒綅灝辮薄goto璇彞涓鏍蜂護浜洪剻瑙嗐備絾鏄畠榪樹笉鏄棤娉曚護浜哄繊鍙楋紝鍥犱負褰撳湪鏌愪簺绱ц鐨勫叧澶達紝綾誨瀷杞崲榪樻槸蹇呴渶鐨勶紝榪欐椂瀹冩槸涓涓繀闇鍝併?br />涓嶈繃C椋庢牸鐨勭被鍨嬭漿鎹㈠茍涓嶄唬琛ㄦ墍鏈夌殑綾誨瀷杞崲鍔熻兘銆?br />涓
鏉ュ畠浠繃浜庣矖椴侊紝鑳藉厑璁鎬綘鍦ㄤ換浣曠被鍨嬩箣闂磋繘琛岃漿鎹€備笉榪囧鏋滆榪涜鏇寸簿紜殑綾誨瀷杞崲錛岃繖浼氭槸涓涓紭鐐廣傚湪榪欎簺綾誨瀷杞崲涓瓨鍦ㄧ潃宸ㄥぇ鐨勪笉鍚岋紝渚嬪鎶婁竴涓寚鍚?
const瀵硅薄鐨勬寚閽堬紙pointer-to-const-object錛夎漿鎹㈡垚鎸囧悜闈瀋onst瀵硅薄鐨勬寚閽堬紙pointer-to-non-const
-object錛?鍗充竴涓粎浠呭幓闄onst鐨勭被鍨嬭漿鎹?錛屾妸涓涓寚鍚戝熀綾葷殑鎸囬拡杞崲鎴愭寚鍚戝瓙綾葷殑鎸囬拡錛堝嵆瀹屽叏鏀瑰彉瀵硅薄綾誨瀷錛夈備紶緇熺殑C椋庢牸鐨勭被鍨嬭漿鎹笉
瀵逛笂榪頒袱縐嶈漿鎹㈣繘琛屽尯鍒嗐傦紙榪欎竴鐐逛篃涓嶄護浜烘儕璁訛紝鍥犱負C椋庢牸鐨勭被鍨嬭漿鎹㈡槸涓篊璇█璁捐鐨勶紝鑰屼笉鏄負C++璇█璁捐鐨勶級銆?br />浜屾潵C椋庢牸鐨勭被鍨嬭漿鎹㈠湪紼?
搴忚鍙ヤ腑闅句互璇嗗埆銆傚湪璇硶涓婏紝綾誨瀷杞崲鐢卞渾鎷彿鍜屾爣璇嗙緇勬垚錛岃岃繖浜涘彲浠ョ敤鍦–錛嬶紜涓殑浠諱綍鍦版柟銆傝繖浣垮緱鍥炵瓟璞¤繖鏍蜂竴涓渶鍩烘湰鐨勬湁鍏崇被鍨嬭漿鎹㈢殑闂鍙樺緱寰?
鍥伴毦錛氣滃湪榪欎釜紼嬪簭涓槸鍚︿嬌鐢ㄤ簡綾誨瀷杞崲錛熲濄傝繖鏄洜涓轟漢宸ラ槄璇誨緢鍙兘蹇界暐浜嗙被鍨嬭漿鎹㈢殑璇彞錛岃屽埄鐢ㄨ薄grep鐨勫伐鍏風▼搴忎篃涓嶈兘浠庤鍙ユ瀯鎴愪笂鍖哄垎鍑哄畠浠?
鏉ャ?br />C++閫氳繃寮曡繘鍥涗釜鏂扮殑綾誨瀷杞崲鎿嶄綔絎﹀厠鏈嶄簡C椋庢牸綾誨瀷杞崲鐨勭己鐐癸紝榪欏洓涓搷浣滅鏄?
static_cast, const_cast, dynamic_cast,
鍜宺einterpret_cast銆傚湪澶у鏁版儏鍐典笅錛屽浜庤繖浜涙搷浣滅浣犲彧闇瑕佺煡閬撳師鏉ヤ綘涔犳儻浜庤繖鏍峰啓錛?br />(type)
expression
鑰岀幇鍦ㄤ綘鎬誨簲璇ヨ繖鏍峰啓錛?br />static_cast<type>(expression)
渚嬪錛屽亣璁句綘鎯蟲妸涓涓猧nt杞崲鎴恉ouble錛屼互渚胯鍖呭惈int綾誨瀷鍙橀噺鐨勮〃杈懼紡浜х敓鍑烘誕鐐規暟鍊肩殑緇撴灉銆傚鏋滅敤C椋庢牸鐨勭被鍨嬭漿鎹紝浣犺兘榪欐牱鍐欙細
int
firstNumber, secondNumber;
...
double result =
((double)firstNumber)/secondNumber錛?br />濡傛灉鐢ㄤ笂榪版柊鐨勭被鍨嬭漿鎹㈡柟娉曪紝浣犲簲璇ヨ繖鏍峰啓錛?br />double
result =
static_cast<double>(firstNumber)/secondNumber;
榪欐牱鐨勭被鍨嬭漿鎹笉璁烘槸瀵逛漢宸ヨ繕鏄紼嬪簭閮藉緢瀹規槗璇嗗埆銆?br />static_cast
鍦ㄥ姛鑳戒笂鍩烘湰涓婁笌C椋庢牸鐨勭被鍨嬭漿鎹竴鏍峰己澶э紝鍚箟涔熶竴鏍楓傚畠涔熸湁鍔熻兘涓婇檺鍒躲備緥濡傦紝浣犱笉鑳界敤static_cast璞$敤C椋庢牸鐨勭被鍨嬭漿鎹竴鏍鋒妸
struct杞崲鎴恑nt綾誨瀷鎴栬呮妸double綾誨瀷杞崲鎴愭寚閽堢被鍨嬶紝鍙﹀錛宻tatic_cast涓嶈兘浠庤〃杈懼紡涓幓闄onst灞炴э紝鍥犱負鍙︿竴涓柊鐨勭被
鍨嬭漿鎹㈡搷浣滅const_cast鏈夎繖鏍風殑鍔熻兘銆?br />鍏跺畠鏂扮殑C++綾誨瀷杞崲鎿嶄綔絎﹁鐢ㄥ湪闇瑕佹洿澶氶檺鍒剁殑鍦版柟銆俢onst_cast鐢ㄤ簬綾誨瀷杞崲鎺夎〃
杈懼紡鐨刢onst鎴杤olatileness灞炴с傞氳繃浣跨敤const_cast錛屼綘鍚戜漢浠拰緙栬瘧鍣ㄥ己璋冧綘閫氳繃綾誨瀷杞崲鎯沖仛鐨勫彧鏄敼鍙樹竴浜涗笢瑗跨殑
constness鎴栬卾olatileness灞炴с傝繖涓惈涔夎緙栬瘧鍣ㄦ墍綰︽潫銆傚鏋滀綘璇曞浘浣跨敤const_cast鏉ュ畬鎴愪慨鏀筩onstness
鎴栬卾olatileness灞炴т箣澶栫殑浜嬫儏錛屼綘鐨勭被鍨嬭漿鎹㈠皢琚嫆緇濄備笅闈㈡槸涓浜涗緥瀛愶細
class Widget { ...
};
class SpecialWidget: public Widget { ... };
void
update(SpecialWidget *psw);
SpecialWidget sw; // sw 鏄竴涓潪const
瀵硅薄銆?br />const SpecialWidget& csw = sw; // csw 鏄痵w鐨勪竴涓紩鐢?br />// 瀹冩槸涓涓猚onst
瀵硅薄
update(&csw); // 閿欒!涓嶈兘浼犻掍竴涓猚onst SpecialWidget* 鍙橀噺
//
緇欎竴涓鐞哠pecialWidget*綾誨瀷鍙橀噺鐨勫嚱鏁?br />update(const_cast<SpecialWidget*>(&csw));
//
姝g‘錛宑sw鐨刢onst琚樉紺哄湴杞崲鎺夛紙
//
csw鍜宻w涓や釜鍙橀噺鍊煎湪update
//鍑芥暟涓兘琚洿鏂幫級
update((SpecialWidget*)&csw);
//
鍚屼笂錛屼絾鐢ㄤ簡涓涓洿闅捐瘑鍒?br />//鐨凜椋庢牸鐨勭被鍨嬭漿鎹?br />Widget *pw = new
SpecialWidget;
update(pw); // 閿欒錛乸w鐨勭被鍨嬫槸Widget*錛屼絾鏄?br />//
update鍑芥暟澶勭悊鐨勬槸SpecialWidget*綾誨瀷
update(const_cast<SpecialWidget*>(pw));
//
閿欒錛乧onst_cast浠呰兘琚敤鍦ㄥ獎鍝?br />// constness or volatileness鐨勫湴鏂逛笂銆?
//
涓嶈兘鐢ㄥ湪鍚戠戶鎵垮瓙綾昏繘琛岀被鍨嬭漿鎹€?br />鍒扮洰鍓嶄負姝紝const_cast鏈鏅氱殑鐢ㄩ斿氨鏄漿鎹㈡帀瀵硅薄鐨刢onst灞炴с?br />絎?
浜岀鐗規畩鐨勭被鍨嬭漿鎹㈢鏄痙ynamic_cast錛屽畠琚敤浜庡畨鍏ㄥ湴娌跨潃綾葷殑緇ф壙鍏崇郴鍚戜笅榪涜綾誨瀷杞崲銆傝繖灝辨槸璇達紝浣犺兘鐢╠ynamic_cast鎶婃寚鍚戝熀
綾葷殑鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚鎸囧悜鍏舵淳鐢熺被鎴栧叾鍏勫紵綾葷殑鎸囬拡鎴栧紩鐢紝鑰屼笖浣犺兘鐭ラ亾杞崲鏄惁鎴愬姛銆傚け璐ョ殑杞崲灝嗚繑鍥炵┖鎸囬拡錛堝綋瀵規寚閽堣繘琛岀被鍨嬭漿鎹㈡椂錛夋垨鑰呮姏鍑哄紓甯?
錛堝綋瀵瑰紩鐢ㄨ繘琛岀被鍨嬭漿鎹㈡椂錛夛細
Widget
*pw;
...
update(dynamic_cast<SpecialWidget*>(pw));
//
姝g‘錛屼紶閫掔粰update鍑芥暟涓涓寚閽?br />// 鏄寚鍚戝彉閲忕被鍨嬩負SpecialWidget鐨刾w鐨勬寚閽?br />//
濡傛灉pw紜疄鎸囧悜涓涓璞?
// 鍚﹀垯浼犻掕繃鍘葷殑灝嗕嬌絀烘寚閽堛?br />void updateViaRef(SpecialWidget&
rsw);
updateViaRef(dynamic_cast<SpecialWidget&>(*pw));
//姝g‘銆備紶閫掔粰updateViaRef鍑芥暟
//
SpecialWidget pw 鎸囬拡錛屽鏋減w
// 紜疄鎸囧悜浜嗘煇涓璞?br />//
鍚﹀垯灝嗘姏鍑哄紓甯?br />dynamic_casts鍦ㄥ府鍔╀綘嫻忚緇ф壙灞傛涓婃槸鏈夐檺鍒剁殑銆傚畠涓嶈兘琚敤浜庣己涔忚櫄鍑芥暟鐨勭被鍨嬩笂錛堝弬瑙佹潯嬈綧24錛夛紝涔熶笉鑳界敤瀹冩潵杞崲鎺塩onstness錛?br />int
firstNumber, secondNumber;
...
double result =
dynamic_cast<double>(firstNumber)/secondNumber;
//
閿欒錛佹病鏈夌戶鎵垮叧緋?br />const SpecialWidget
sw;
...
update(dynamic_cast<SpecialWidget*>(&sw));
//
閿欒! dynamic_cast涓嶈兘杞崲
//
鎺塩onst銆?br />濡備綘鎯沖湪娌℃湁緇ф壙鍏崇郴鐨勭被鍨嬩腑榪涜杞崲錛屼綘鍙兘鎯沖埌static_cast銆傚鏋滄槸涓轟簡鍘婚櫎const錛屼綘鎬誨緱鐢╟onst_cast銆?br />榪欏洓涓被鍨嬭漿鎹㈢涓殑鏈鍚庝竴涓槸reinterpret_cast銆備嬌鐢ㄨ繖涓搷浣滅鐨勭被鍨嬭漿鎹紝鍏剁殑杞崲緇撴灉鍑犱箮閮芥槸鎵ц鏈熷畾涔夛紙implementation-defined錛夈傚洜姝わ紝浣跨敤reinterpret_casts鐨勪唬鐮佸緢闅劇Щ妞嶃?br />reinterpret_casts鐨勬渶鏅氱殑鐢ㄩ斿氨鏄湪鍑芥暟鎸囬拡綾誨瀷涔嬮棿榪涜杞崲銆備緥濡傦紝鍋囪浣犳湁涓涓嚱鏁版寚閽堟暟緇勶細
typedef
void (*FuncPtr)(); // FuncPtr is 涓涓寚鍚戝嚱鏁?br />// 鐨勬寚閽堬紝璇ュ嚱鏁版病鏈夊弬鏁?br />//
榪斿洖鍊肩被鍨嬩負void
FuncPtr funcPtrArray[10]; // funcPtrArray 鏄竴涓兘瀹圭撼
//
10涓狥uncPtrs鎸囬拡鐨勬暟緇?br />璁╂垜浠亣璁句綘甯屾湜錛堝洜涓烘煇浜涜帿鍚嶅叾濡欑殑鍘熷洜錛夋妸涓涓寚鍚戜笅闈㈠嚱鏁扮殑鎸囬拡瀛樺叆funcPtrArray鏁扮粍錛?br />int
doSomething();
浣犱笉鑳戒笉緇忚繃綾誨瀷杞崲鑰岀洿鎺ュ幓鍋氾紝鍥犱負doSomething鍑芥暟瀵逛簬funcPtrArray鏁扮粍鏉ヨ鏈変竴涓敊璇殑綾誨瀷銆傚湪FuncPtrArray鏁扮粍閲岀殑鍑芥暟榪斿洖鍊兼槸void綾誨瀷錛岃宒oSomething鍑芥暟榪斿洖鍊兼槸int綾誨瀷銆?br />funcPtrArray[0]
= &doSomething; //
閿欒錛佺被鍨嬩笉鍖歸厤
reinterpret_cast鍙互璁╀綘榪嬌緙栬瘧鍣ㄤ互浣犵殑鏂規硶鍘葷湅寰呭畠浠細
funcPtrArray[0] = //
this
compiles
reinterpret_cast<FuncPtr>(&doSomething);
杞崲鍑芥暟鎸囬拡鐨勪唬鐮佹槸涓嶅彲縐繪鐨勶紙C++涓嶄繚璇佹墍鏈夌殑鍑芥暟鎸囬拡閮借鐢ㄤ竴鏍風殑鏂規硶琛ㄧず錛夛紝鍦ㄤ竴浜涙儏鍐典笅榪欐牱鐨勮漿鎹細浜х敓涓嶆紜殑緇撴灉錛堝弬瑙佹潯嬈綧31錛夛紝鎵浠ヤ綘搴旇閬垮厤杞崲鍑芥暟鎸囬拡綾誨瀷錛岄櫎闈炰綘澶勪簬鐫鑳屾按涓鎴樺拰灝栧垁鏋跺枆鐨勫嵄鎬ユ椂鍒匯備竴鎶婇攱鍒╃殑鍒銆備竴鎶婇潪甯擱攱鍒╃殑鍒銆?br />濡傛灉浣犱嬌鐢ㄧ殑緙栬瘧鍣ㄧ己涔忓鏂扮殑綾誨瀷杞崲鏂瑰紡鐨勬敮鎸侊紝浣犲彲浠ョ敤浼犵粺鐨勭被鍨嬭漿鎹㈡柟娉曚唬鏇縮tatic_cast,
const_cast, 浠ュ強reinterpret_cast銆備篃鍙互鐢ㄤ笅闈㈢殑瀹忔浛鎹㈡潵妯℃嫙鏂扮殑綾誨瀷杞崲璇硶錛?br />#define
static_cast(TYPE,EXPR) ((TYPE)(EXPR))
#define const_cast(TYPE,EXPR)
((TYPE)(EXPR))
#define reinterpret_cast(TYPE,EXPR)
((TYPE)(EXPR))
浣犲彲浠ヨ薄榪欐牱浣跨敤浣跨敤錛?br />double result = static_cast(double,
firstNumber)/secondNumber;
update(const_cast(SpecialWidget*,
&sw));
funcPtrArray[0] = reinterpret_cast(FuncPtr,
&doSomething);
榪欎簺妯℃嫙涓嶄細璞$湡瀹炵殑鎿嶄綔絎︿竴鏍峰畨鍏紝浣嗘槸褰撲綘鐨勭紪璇戝櫒鍙互鏀寔鏂扮殑鐨勭被鍨嬭漿鎹㈡椂錛屽畠浠彲浠ョ畝鍖栦綘鎶婁唬鐮佸崌綰х殑榪囩▼銆?br />娌?
鏈変竴涓鏄撶殑鏂規硶鏉ユā鎷焏ynamic_cast鐨勬搷浣滐紝浣嗘槸寰堝鍑芥暟搴撴彁渚涗簡鍑芥暟錛屽畨鍏ㄥ湴鍦ㄦ淳鐢熺被涓庡熀綾諱箣闂磋繘琛岀被鍨嬭漿鎹€傚鏋滀綘娌℃湁榪欎簺鍑芥暟鑰屼綘鏈夊繀
欏昏繘琛岃繖鏍風殑綾誨瀷杞崲錛屼綘涔熷彲浠ュ洖鍒癈椋庢牸鐨勭被鍨嬭漿鎹㈡柟娉曚笂錛屼絾鏄繖鏍風殑璇濅綘灝嗕笉鑳借幏鐭ョ被鍨嬭漿鎹㈡槸鍚﹀け璐ャ傚綋鐒訛紝浣犱篃鍙互瀹氫箟涓涓畯鏉ユā鎷?
dynamic_cast鐨勫姛鑳斤紝灝辮薄妯℃嫙鍏跺畠鐨勭被鍨嬭漿鎹竴鏍鳳細
#define
dynamic_cast(TYPE,EXPR)
(TYPE)(EXPR)
璇瘋浣忥紝榪欎釜妯℃嫙騫朵笉鑳藉畬鍏ㄥ疄鐜癲ynamic_cast鐨勫姛鑳斤紝瀹冩病鏈夊姙娉曠煡閬撹漿鎹㈡槸鍚﹀け璐ャ?br />鎴?
鐭ラ亾錛屾槸鐨勶紝鎴戠煡閬擄紝鏂扮殑綾誨瀷杞崲鎿嶄綔絎︿笉鏄緢緹庤鑰屼笖鐢ㄩ敭鐩橀敭鍏ヤ篃寰堥夯鐑︺傚鏋滀綘鍙戠幇瀹冧滑鐪嬩笂鍘誨疄鍦ㄤ護浜鴻鍘岋紝C椋庢牸鐨勭被鍨嬭漿鎹㈣繕鍙互緇х畫浣跨敤騫朵笖鍚?
娉曘傜劧鑰岋紝姝f槸鍥犱負鏂扮殑綾誨瀷杞崲絎︾己涔忕編鎰熸墠鑳戒嬌瀹冨譏琛ヤ簡鍦ㄥ惈涔夌簿紜у拰鍙鯨璁ゆт笂鐨勭己鐐廣傚茍涓旓紝浣跨敤鏂扮被鍨嬭漿鎹㈢鐨勭▼搴忔洿瀹規槗琚В鏋愶紙涓嶈鏄浜哄伐榪樻槸
瀵逛簬宸ュ叿紼嬪簭錛夛紝瀹冧滑鍏佽緙栬瘧鍣ㄦ嫻嬪嚭鍘熸潵涓嶈兘鍙戠幇鐨勯敊璇傝繖浜涢兘鏄斁寮僀椋庢牸綾誨瀷杞崲鏂規硶鐨勫己鏈夊姏鐨勭悊鐢便傝繕鏈夌涓変釜鐞嗙敱錛氫篃璁歌綾誨瀷杞崲絎︿笉緹庤鍜岄敭
鍏ラ夯鐑︽槸涓浠跺ソ浜嬨?/font>
string綾葷殑瀛楃鎿嶄綔錛?br />
const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
operator[]鍜宎t()鍧囪繑鍥炲綋鍓嶅瓧絎︿覆涓n涓瓧絎︾殑浣嶇疆錛屼絾at鍑芥暟鎻愪緵鑼冨洿媯鏌ワ紝褰撹秺鐣屾椂浼氭姏鍑簅ut_of_range寮傚父錛屼笅鏍囪繍綆楃[]涓嶆彁渚涙鏌ヨ闂?br />
const char *data()const;//榪斿洖涓涓潪null緇堟鐨刢瀛楃鏁扮粍
const char *c_str()const;//榪斿洖涓涓互null緇堟鐨刢瀛楃涓?br />
int copy(char *s, int n, int pos = 0)
const;//鎶婂綋鍓嶄覆涓互pos寮濮嬬殑n涓瓧絎︽嫹璐濆埌浠涓鴻搗濮嬩綅緗殑瀛楃鏁扮粍涓紝榪斿洖瀹為檯鎷瘋礉鐨勬暟鐩?/font>
string鐨勭壒鎬ф弿榪?
int capacity()const;聽聽聽 //榪斿洖褰撳墠瀹歸噺錛堝嵆string涓笉蹇呭鍔犲唴瀛樺嵆鍙瓨鏀劇殑鍏冪礌涓暟錛?br />
int max_size()const;聽聽聽 //榪斿洖string瀵硅薄涓彲瀛樻斁鐨勬渶澶у瓧絎︿覆鐨勯暱搴?br />
int size()const;聽聽聽聽聽聽聽 //榪斿洖褰撳墠瀛楃涓茬殑澶у皬
int length()const;聽聽聽聽聽聽 //榪斿洖褰撳墠瀛楃涓茬殑闀垮害
bool empty()const;聽聽聽聽聽聽聽 //褰撳墠瀛楃涓叉槸鍚︿負絀?br />
void resize(int len,char c);//鎶婂瓧絎︿覆褰撳墠澶у皬緗負len錛屽茍鐢ㄥ瓧絎濉厖涓嶈凍鐨勯儴鍒?/font>
string綾葷殑杈撳叆杈撳嚭鎿嶄綔:
string綾婚噸杞借繍綆楃operator>>鐢ㄤ簬杈撳叆錛屽悓鏍烽噸杞借繍綆楃operator<<鐢ㄤ簬杈撳嚭鎿嶄綔銆?br />
鍑芥暟getline(istream &in,string &s);鐢ㄤ簬浠庤緭鍏ユ祦in涓鍙栧瓧絎︿覆鍒皊涓紝浠ユ崲琛岀'\n'鍒嗗紑銆?br />
聽
string鐨勮祴鍊鹼細
string &operator=(const string &s);//鎶婂瓧絎︿覆s璧嬬粰褰撳墠瀛楃涓?br />
string &assign(const char *s);//鐢╟綾誨瀷瀛楃涓瞫璧嬪?br />
string &assign(const char *s,int n);//鐢╟瀛楃涓瞫寮濮嬬殑n涓瓧絎﹁祴鍊?br />
string &assign(const string &s);//鎶婂瓧絎︿覆s璧嬬粰褰撳墠瀛楃涓?br />
string &assign(int n,char c);//鐢╪涓瓧絎璧嬪肩粰褰撳墠瀛楃涓?br />
string &assign(const string &s,int start,int n);//鎶婂瓧絎︿覆s涓粠start寮濮嬬殑n涓瓧絎﹁祴緇欏綋鍓嶅瓧絎︿覆
string &assign(const_iterator first,const_itertor
last);//鎶奻irst鍜宭ast榪唬鍣ㄤ箣闂寸殑閮ㄥ垎璧嬬粰瀛楃涓?br />
聽
string鐨勮繛鎺ワ細
string &operator+=(const string
&s);//鎶婂瓧絎︿覆s榪炴帴鍒板綋鍓嶅瓧絎︿覆鐨勭粨灝?
string &append(const char *s);聽聽聽聽聽聽聽聽聽聽聽 //鎶奵綾誨瀷瀛楃涓瞫榪炴帴鍒板綋鍓嶅瓧絎︿覆緇撳熬
string &append(const char *s,int
n);//鎶奵綾誨瀷瀛楃涓瞫鐨勫墠n涓瓧絎﹁繛鎺ュ埌褰撳墠瀛楃涓茬粨灝?br />
string &append(const string &s);聽聽聽 //鍚宱perator+=()
string &append(const string &s,int pos,int n);//鎶婂瓧絎︿覆s涓粠pos寮濮嬬殑n涓瓧絎﹁繛鎺ュ埌褰撳墠瀛楃涓茬殑緇撳熬
string &append(int n,char c);聽聽聽聽聽聽聽 //鍦ㄥ綋鍓嶅瓧絎︿覆緇撳熬娣誨姞n涓瓧絎
string &append(const_iterator first,const_iterator
last);//鎶婅凱浠e櫒first鍜宭ast涔嬮棿鐨勯儴鍒嗚繛鎺ュ埌褰撳墠瀛楃涓茬殑緇撳熬
聽
string鐨勬瘮杈冿細
聽
bool operator==(const string &s1,const string &s2)const;//姣旇緝涓や釜瀛楃涓叉槸鍚︾浉絳?br />
榪愮畻絎?>","<",">=","<=","!="鍧囪閲嶈澆鐢ㄤ簬瀛楃涓茬殑姣旇緝錛?br />
int compare(const string &s) const;//姣旇緝褰撳墠瀛楃涓插拰s鐨勫ぇ灝?br />
int compare(int pos, int n,const string &s)const;//姣旇緝褰撳墠瀛楃涓蹭粠pos寮濮嬬殑n涓瓧絎︾粍鎴愮殑瀛楃涓蹭笌s鐨勫ぇ灝?br />
int compare(int pos, int n,const string &s,int pos2,int
n2)const;//姣旇緝褰撳墠瀛楃涓蹭粠pos寮濮嬬殑n涓瓧絎︾粍鎴愮殑瀛楃涓蹭笌s涓璸os2寮濮嬬殑n2涓瓧絎︾粍鎴愮殑瀛楃涓茬殑澶у皬
int compare(const char *s) const;
int compare(int pos, int n,const char *s) const;
int compare(int pos, int n,const char *s, int pos2) const;
compare鍑芥暟鍦?gt;鏃惰繑鍥?錛?lt;鏃惰繑鍥?1錛?=鏃惰繑鍥?
string鐨勫瓙涓詫細
string substr(int pos = 0,int n = npos) const;//榪斿洖pos寮濮嬬殑n涓瓧絎︾粍鎴愮殑瀛楃涓?
string鐨勪氦鎹細
void swap(string &s2);聽聽聽 //浜ゆ崲褰撳墠瀛楃涓蹭笌s2鐨勫?/font>
聽
string綾葷殑鏌ユ壘鍑芥暟錛?/font>
int find(char c, int pos = 0)
const;//浠巔os寮濮嬫煡鎵懼瓧絎鍦ㄥ綋鍓嶅瓧絎︿覆鐨勪綅緗?br />
int find(const char *s, int pos = 0) const;//浠巔os寮濮嬫煡鎵懼瓧絎︿覆s鍦ㄥ綋鍓嶄覆涓殑浣嶇疆
int find(const char *s, int pos, int n) const;//浠巔os寮濮嬫煡鎵懼瓧絎︿覆s涓墠n涓瓧絎﹀湪褰撳墠涓蹭腑鐨勪綅緗?br />
int find(const string &s, int pos = 0) const;//浠巔os寮濮嬫煡鎵懼瓧絎︿覆s鍦ㄥ綋鍓嶄覆涓殑浣嶇疆
//鏌ユ壘鎴愬姛鏃惰繑鍥炴墍鍦ㄤ綅緗紝澶辮觸榪斿洖string::npos鐨勫?
int rfind(char c, int pos = npos)
const;//浠巔os寮濮嬩粠鍚庡悜鍓嶆煡鎵懼瓧絎鍦ㄥ綋鍓嶄覆涓殑浣嶇疆
int rfind(const char *s, int pos = npos) const;
int rfind(const char *s, int pos, int n = npos) const;
int rfind(const string &s,int pos = npos) const;
//浠巔os寮濮嬩粠鍚庡悜鍓嶆煡鎵懼瓧絎︿覆s涓墠n涓瓧絎︾粍鎴愮殑瀛楃涓插湪褰撳墠涓蹭腑鐨勪綅緗紝鎴愬姛榪斿洖鎵鍦ㄤ綅緗紝澶辮觸鏃惰繑鍥瀞tring::npos鐨勫?
int find_first_of(char c, int pos = 0)
const;//浠巔os寮濮嬫煡鎵懼瓧絎絎竴嬈″嚭鐜扮殑浣嶇疆
int find_first_of(const char *s, int pos = 0) const;
int find_first_of(const char *s, int pos, int n) const;
int find_first_of(const string &s,int pos = 0) const;
//浠巔os寮濮嬫煡鎵懼綋鍓嶄覆涓涓涓湪s鐨勫墠n涓瓧絎︾粍鎴愮殑鏁扮粍閲岀殑瀛楃鐨勪綅緗傛煡鎵懼け璐ヨ繑鍥瀞tring::npos
int find_first_not_of(char c, int pos = 0) const;
int find_first_not_of(const char *s, int pos = 0) const;
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;
//浠庡綋鍓嶄覆涓煡鎵劇涓涓笉鍦ㄤ覆s涓殑瀛楃鍑虹幇鐨勪綅緗紝澶辮觸榪斿洖string::npos
int find_last_of(char c, int pos = npos) const;
int find_last_of(const char *s, int pos = npos) const;
int find_last_of(const char *s, int pos, int n = npos) const;
int find_last_of(const string &s,int pos = npos) const;
int find_last_not_of(char c, int pos = npos) const;
int find_last_not_of(const char *s, int pos = npos) const;
int find_last_not_of(const char *s, int pos,聽 int n) const;
int find_last_not_of(const string &s,int pos = npos) const;
//find_last_of鍜宖ind_last_not_of涓巉ind_first_of鍜宖ind_first_not_of鐩鎬技錛屽彧涓嶈繃鏄粠鍚庡悜鍓嶆煡鎵?
聽
string綾葷殑鏇挎崲鍑芥暟錛?/font>
string &replace(int p0, int n0,const char
*s);//鍒犻櫎浠巔0寮濮嬬殑n0涓瓧絎︼紝鐒跺悗鍦╬0澶勬彃鍏ヤ覆s
string &replace(int p0, int n0,const char *s, int
n);//鍒犻櫎p0寮濮嬬殑n0涓瓧絎︼紝鐒跺悗鍦╬0澶勬彃鍏ュ瓧絎︿覆s鐨勫墠n涓瓧絎?br />
string &replace(int p0, int n0,const string &s);//鍒犻櫎浠巔0寮濮嬬殑n0涓瓧絎︼紝鐒跺悗鍦╬0澶勬彃鍏ヤ覆s
string &replace(int p0, int n0,const string &s, int pos, int
n);//鍒犻櫎p0寮濮嬬殑n0涓瓧絎︼紝鐒跺悗鍦╬0澶勬彃鍏ヤ覆s涓粠pos寮濮嬬殑n涓瓧絎?br />
string &replace(int p0, int n0,int n, char c);//鍒犻櫎p0寮濮嬬殑n0涓瓧絎︼紝鐒跺悗鍦╬0澶勬彃鍏涓瓧絎
string &replace(iterator first0, iterator last0,const char
*s);//鎶奫first0錛宭ast0錛変箣闂寸殑閮ㄥ垎鏇挎崲涓哄瓧絎︿覆s
string &replace(iterator first0, iterator last0,const char *s, int
n);//鎶奫first0錛宭ast0錛変箣闂寸殑閮ㄥ垎鏇挎崲涓簊鐨勫墠n涓瓧絎?br />
string &replace(iterator first0, iterator last0,const string
&s);//鎶奫first0錛宭ast0錛変箣闂寸殑閮ㄥ垎鏇挎崲涓轟覆s
string &replace(iterator first0, iterator last0,int n, char
c);//鎶奫first0錛宭ast0錛変箣闂寸殑閮ㄥ垎鏇挎崲涓簄涓瓧絎
string &replace(iterator first0, iterator last0,const_iterator first,
const_iterator last);//鎶奫first0錛宭ast0錛変箣闂寸殑閮ㄥ垎鏇挎崲鎴怺first錛宭ast錛変箣闂寸殑瀛楃涓?
string綾葷殑鎻掑叆鍑芥暟錛?/font>
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//鍓?涓嚱鏁板湪p0浣嶇疆鎻掑叆瀛楃涓瞫涓璸os寮濮嬬殑鍓峮涓瓧絎?br />
string &insert(int p0, int n, char c);//姝ゅ嚱鏁板湪p0澶勬彃鍏涓瓧絎
iterator insert(iterator it, char c);//鍦╥t澶勬彃鍏ュ瓧絎錛岃繑鍥炴彃鍏ュ悗榪唬鍣ㄧ殑浣嶇疆
void insert(iterator it, const_iterator first, const_iterator last);//鍦╥t澶勬彃鍏first錛宭ast錛変箣闂寸殑瀛楃
void insert(iterator it, int n, char c);//鍦╥t澶勬彃鍏涓瓧絎
聽
string綾葷殑鍒犻櫎鍑芥暟
iterator erase(iterator first, iterator last);//鍒犻櫎[first錛宭ast錛変箣闂寸殑鎵鏈夊瓧絎︼紝榪斿洖鍒犻櫎鍚庤凱浠e櫒鐨勪綅緗?br /> iterator erase(iterator it);//鍒犻櫎it鎸囧悜鐨勫瓧絎︼紝榪斿洖鍒犻櫎鍚庤凱浠e櫒鐨勪綅緗?br /> string &erase(int pos = 0, int n = npos);//鍒犻櫎pos寮濮嬬殑n涓瓧絎︼紝榪斿洖淇敼鍚庣殑瀛楃涓?/font>
聽
string綾葷殑榪唬鍣ㄥ鐞嗭細
string綾繪彁渚涗簡鍚戝墠鍜屽悜鍚庨亶鍘嗙殑榪唬鍣╥terator錛岃凱浠e櫒鎻愪緵浜嗚闂悇涓瓧絎︾殑璇硶錛岀被浼間簬鎸囬拡鎿嶄綔錛岃凱浠e櫒涓嶆鏌ヨ寖鍥淬?br />
鐢╯tring::iterator鎴杝tring::const_iterator澹版槑榪唬鍣ㄥ彉閲忥紝const_iterator涓嶅厑璁告敼鍙樿凱浠g殑鍐呭銆傚父鐢ㄨ凱浠e櫒鍑芥暟鏈夛細
const_iterator begin()const;
iterator begin();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//榪斿洖string鐨勮搗濮嬩綅緗?br />
const_iterator end()const;
iterator end();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//榪斿洖string鐨勬渶鍚庝竴涓瓧絎﹀悗闈㈢殑浣嶇疆
const_iterator rbegin()const;
iterator rbegin();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//榪斿洖string鐨勬渶鍚庝竴涓瓧絎︾殑浣嶇疆
const_iterator rend()const;
iterator rend();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//榪斿洖string絎竴涓瓧絎︿綅緗殑鍓嶉潰
rbegin鍜宺end鐢ㄤ簬浠庡悗鍚戝墠鐨勮凱浠h闂紝閫氳繃璁劇疆榪唬鍣╯tring::reverse_iterator,string::const_reverse_iterator瀹炵幇
聽
瀛楃涓叉祦澶勭悊錛?/font>
閫氳繃瀹氫箟ostringstream鍜宨stringstream鍙橀噺瀹炵幇錛?lt;sstream>澶存枃浠朵腑
渚嬪錛?br />
聽聽聽 string input("hello,this is a test");
聽聽聽 istringstream is(input);
聽聽聽 string s1,s2,s3,s4;
聽聽聽 is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"
聽聽聽 ostringstream os;
聽聽聽 os<<s1<<s2<<s3<<s4;
聽聽聽 cout<<os.str();
聽
妯℃澘綾誨拰妯℃澘鍑芥暟閮芥槸闈炲父鏈夌敤鐨勫伐鍏楓備緥濡俿qr()鍑芥暟鍙互璁$畻騫蟲柟鏁幫紝浠諱綍瀹氫箟浜嗕箻娉曡繍綆楃殑鏁版嵁綾誨瀷錛堟暟瀛楋紝鐭╅樀錛夐兘閫傜敤銆傛爣鍑嗗鍣ㄧ被(濡? list)閮芥槸妯℃澘錛岃繖鏍峰浜庢瘡涓柊綾誨瀷鏃犻渶閲嶅啓浜嗭紝榪欐鏄嬌鐢ㄦ棫鐗堢殑C++鏃剁湡姝eご鐤肩殑浜嬫儏錛屽洜姝ゆ垜璁や負ISO鐨勬爣鍑嗘槸涓紵澶х殑榪涙銆傜劧鑰岋紝鍦ㄨ繖涓繃紼? 涓湁浜涗笢瑗跨敤寰楄繃澶翠簡銆?
渚嬪錛氭爣鍑嗗簱涓緱string 鍜宨ostream 閮芥槸浣跨敤"character traits"綾誨瀷浣滀負鍙傛暟銆傝繖鎰忓懗鐫鍚屼竴涓猙asic_string<>綾誨彲浠ョ敤浜嶢SCII瀛楃涓詫紝涔熷彲鐢ㄤ簬Unicode錛岀敋鑷崇敤浜庣伀 鏄熶漢鐨勪笁瀛楄妭瀛楃涓詫紙鍘熷垯铏界劧濡傛錛屼絾璁稿鐗堟湰閮藉彧鏄疄鐜頒簡ASCII瀛楃涓詫紝鐪嬭搗鏉ユ湁鐐規粦紼斤級銆傛爣鍑嗚姹傝繖浜涘父鐢ㄧ被蹇呴』瀹炵幇鎴愭ā鏉垮艦寮忥紝鑰岃繖浜涚被鍑犱箮娑? 鍙婂埌鎵鏈塁++搴旂敤銆?
浣嗘槸榪欏鎬ц兘鍜岃皟璇曚細甯︽潵璁稿楹葷儲銆備笅闈㈠嚑涓瘯楠岃В閲婁簡榪欎釜闂錛堟湰璇曢獙浣跨敤鐨勭紪璇戝櫒涓篤C++6.0)銆傜紪璇戝櫒鍚屾椂鏀寔鏂伴鏍肩殑 iostream錛堜嬌鐢ㄦā鏉匡級鍜岀粡鍏擱鏍肩殑iostream, 鍥犳鎴戜滑鑳芥瘮杈冧粬浠簩鑰呯殑鐗堟湰瀹炵幇銆傜涓涓祴璇曠▼搴忓綋鐒舵槸浣跨敤"Hello, Word"浜嗭紝鏂伴鏍肩殑緙栬瘧鏃墮棿鏄粡鍏擱鏍肩殑2鍊嶃傚彟涓涓洿姝h鐨勪緥瀛愬ぇ綰︽湁200琛岋紝姣忚杈撳嚭10涓彉閲忕敤浜庤鏁般傝繖涓祴璇曠▼搴忔渶鏄捐憲鐨勭粨璁烘槸緙栬瘧閫? 搴︼細鏂伴鏍肩増鏈姳浜?0縐掔紪璇戝畬鎴愶紝鑰屾棫鐗堟湰鍙嬌鐢ㄤ簡1.5縐掋?0縐掓椂闂村彲騫朵笉灝戯紝鍙互瀹屾垚寰堝浜嬫儏銆傚彟澶栵紝鏂伴鏍肩増鏈殑鍙墽琛屾枃浠剁殑澶у皬涓?15K錛? 鑰屾棫鐗堟湰鍙湁70K銆備綘鐨勬祴璇曟暟鎹彲鑳芥湁浜涘嚭鍏ワ紝浣嗘槸鏁翠綋緇撹鏄竴鏍風殑錛氬綋浣跨敤鏂扮増鏈椂錛屼細鏈夋洿鎱㈢殑緙栬瘧閫熷害鍜屾洿澶х殑鍙墽琛屾枃浠躲傝繖騫朵笉鏄洜涓哄井杞叕鍙哥紪 璇戝櫒鐨勯棶棰橈紝浣跨敤GCC嫻嬭瘯涔熶細寰楀埌鍚屾牱鐨勭粨璁恒?
褰撶劧錛屽拰榪囧幓涓嶄竴鏍鳳紝鍙墽琛屾枃浠剁殑澶у皬騫朵笉鏄偅涔堥噸瑕侊紝鐜板湪錛屽彲緙栫▼璁懼縐嶇被姝e揩閫熷闀匡紝鍖呮嫭璁稿淇℃伅搴旂敤錛屽閬ユ帶銆佹墜鏈恒佹櫤鑳藉啺綆便佸熀 浜庤摑鐗欐妧鏈殑鍜栧暋鏈虹瓑絳夛紝鍦ㄨ繖浜涘簲鐢ㄤ腑鍐呭瓨榪戝嚑騫撮兘浼氭槸鍗佸垎瀹濊吹鐨勮祫婧愩備嬌鐢ㄦ爣鍑唅ostream 鑰屼駭鐢熺殑棰濆鐨勪簩榪涘埗鏂囦歡錛屾潵婧愪簬鍐呰仈浜嗘暣涓ā鏉跨被鐨勪唬鐮侊紝瑕佹槸娌℃湁code bload宸ュ叿錛屼綘寰堥毦浼樺寲閭d簺閲嶈鐨勬搷浣溿傚鎴戞潵璇達紝緙栬瘧鏃墮棿闂鏇翠弗閲嶄竴浜涳紝鍥犱負榪欐牱鎰忓懗鐫鏇撮暱鐨勭瓑寰咃紝浠庤屽け鍘諱簡寮鍙戜腑闈炲父閲嶈鍘熷垯錛氫簰鍔ㄥ師鍒欍?
鐜板湪鎴戜滑鏉ヨ冭檻璋冭瘯鐨勯棶棰樸傛爣鍑嗗簱涓璼tring 綾葷殑妯℃澘瀹炵幇闈炲父鑱槑錛屼絾騫朵笉閫傚悎浜庤皟璇曘備綘浼氶潰涓翠嬌鐢ㄨ秴闀垮悕瀛楃殑緙栬瘧鍣ㄥ拰璋冭瘯鍣ㄧ殑淇℃伅錛?
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>>
褰撶劧錛屽湪璁稿搴旂敤涓垜浠兘闇瑕佽繖縐峴td::string鎻愪緵鐨勭伒媧繪э紝渚嬪錛岄渶瑕佸悓鏃跺鐞咥SCII 鍜孶nicode瀛楃涓詫紝鎴栬呴渶瑕佸畾鍒惰嚜宸辯殑allocator 絳夌瓑銆備絾榪欏茍涓嶆槸鏅亶闇姹?閫氬父紼嬪簭鍛樿涔堝彧澶勭悊ASCII錛岃涔堝彧澶勭悊Unicode ), 鐪嬭搗鏉ュ浜庣▼搴忓憳鎵挎媴榪欑鑼冨瀷鏈哄埗鏈変簺涓嶅叕騫熾傝繖縐嶆満鍒剁‘瀹炶鏍囧噯搴撶殑璁捐鑰呰寰楀緢鏈夋剰鎬濓紝浣嗗鍔犱簡搴旂敤寮鍙戠▼搴忓憳浣跨敤鐨勫鏉傚害銆傝繖浼間箮棰犲掍簡榪欎釜鍘熷垯錛? 鑹ソ鐨勬爣鍑嗗簱璁捐搴旇闅愯棌鍏跺疄鐜扮殑澶嶆潅搴︼紝鑰岃鐢ㄦ埛鐩存帴浣跨敤銆備絾std::string 瀵瑰叾瀹炵幇鐨勫鏉傚害闅愯棌寰楀茍涓嶅錛屽鑷村湪鐢ㄦ埛浣跨敤榪囩▼涓笉鏂殑閬囧埌璁捐涓殑闂銆傛垜浠笉鑳借姹傛爣鍑嗗簱鐨勭敤鎴烽兘鏄笓瀹躲傛爣鍑嗗潥鎸佽姹傝繖縐嶇壒瀹氱殑瀹炵幇鏂瑰紡錛屽拰鏍? 鍑嗗簱鐨勮璁″垵琛風浉榪濊儗錛屽叾鍒濊》鏄彧鎻愪緵鍏叡鐨勬帴鍙e拰鍖呭惈涓浜涚壒瀹氬姛鑳界殑綾誨簱銆傝嚜鐒訛紝榪欑鑼冨瀷妯℃澘瀵逛簬閭d簺鐪熸鍘昏浠栦滑鐨勪漢鏄竴鐩存湁鏁堢殑銆?
榪欎簺緇嗚妭鑰冭檻鍚屾牱搴旂敤浜庢爣鍑嗗鍣紝渚嬪list<>瀹瑰櫒錛宭ist 鏈変竴浜涢澶栫殑榛樿妯℃澘鍙傛暟錛岀敤浜庡畾涔変簡榛樿鐨刟llocator銆傚綋鐒惰嚜宸卞畾涔塧llocator 鍗佸垎鏈夌敤錛屼絾緇濆ぇ澶氭暟浜轟笉闇瑕佽嚜宸卞幓瀹炵幇銆傝繖浜涙硾鍖栫殑鐗堟湰瀹屽叏鍙互浣滀負鍗曠嫭鐨勬ā鏉挎彁渚涖傛垜鎵胯榪欐牱鍋氫細璁╂爣鍑嗗簱鐨勮璁″湪鎶鏈笂鍙樺緱娌℃湁浠ュ墠鏈夋剰鎬濓紝浣嗚繖浜? 搴撳湪璁捐涔嬪垵灝卞簲璇ヨ冭檻鍒版渶緇堢敤鎴楓傜鏀逛竴涓婥++鐨勯姝岋細鐢ㄦ埛涓嶅簲璇ヤ負浠栦滑涓嶉渶瑕佺殑涓滆タ涔板崟銆?
褰撴垜浠笉闇瑕佹ā鏉跨殑鏃跺欙紝鎴戜滑涓嶅緱涓嶄嬌鐢ㄦā鏉褲傞櫎姝や箣澶栵紝鍦–錛嬶紜涓敤鑼冨瀷緙栫▼榪樹細閬囧埌鍙︿竴涓殑闂銆傚ぇ澶氭暟浜洪兘鍚屾剰錛屾爣鍑嗙殑algorithm 鍗佸垎鏈夌敤銆傚鏋滀綘鏈変竴涓暣鍨嬬殑vector, 浣犲彲浠ョ洿鎺ヤ嬌鐢ㄤ笅闈㈢殑璇彞鏉ユ帓搴忥細
sort(v.begin(),v.end());
浣嗘湁浜涘簲鐢ㄧ悊瑙h搗鏉ュ崄鍒嗘櫐娑╋細
copy_if(v.begin(),v.end(),ostream_iterator<int>(cout) bind2nd(greater<int>(),7));
vector<int>::iterator li;
for (li = v.begin(); li != v.end(); ++li)
if (*li > 7) cout << *li;
for_each(ls.begin(),ls.end(),
bind2nd(mem_fun(&Shape::draw),canvas));
ShapeList::iterator li;
for (li = ls.begin(); li != ls.end(); ++li)
(*li)->draw(canvas);
for_each(ls.begin(),ls.end(),
void lambda(Shape *p) { p->draw(canvas); });
C++ 鏄竴縐嶄笉鍙濊鐨勭紪紼嬭璦錛屽皬鍒版墜鏈猴紝澶у埌璺ㄥ浗闄呯綉緇滐紝閮芥湁鍏跺簲鐢ㄣ傚畠闈炲父鐏墊椿錛岃兘澶熸敮鎸佸縐嶇紪紼嬮鏍鹼紝浣嗚繖縐嶇伒媧誨悓鏍蜂篃鏄叾闂鎵鍦ㄣ傜紪紼嬬殑鑹烘湳鍦ㄤ簬涓? 鐗瑰畾鐨勯棶棰橀夋嫨鍚堥傜紪紼嬮鏍鹼紝灝卞儚鑰佸笀鎬繪彁閱掑啓浣滄枃鏄閫夋嫨濂界殑椋庢牸涓鏍楓傛垜騫朵笉鎯寵瘚姣?C++ 鏍囧噯搴擄紝榪欓噷闈㈠寘鍚簡璁稿浜虹殑杈涘嫟鍔沖姩錛屽茍涓哄ぇ瀹舵彁渚涗簡涓涓叕鍏卞鉤鍙般傛垜瀵逛簬榪欎釜鏍囧噯鐨勬佸害鏄紝瀹冨拰鑼冨瀷緙栫▼鑱旂郴榪囦簬绱у瘑錛屼粠鑰屽彉鎴愪簡鍦ㄨ鏄庝粈涔堥鏍兼槸濂? 鐨勭紪紼嬮鏍?渚嬪錛岀畻娉曚腑鏄庢樉鍊懼悜浜庝笉瑕佷嬌鐢ㄦ樉寮忓驚鐜?, 鍚屾椂瀹冧篃璁╃▼搴忓憳浠笉寰椾笉浠嬪叆涓浜涘疄鐜扮粏鑺?濡俠asic_string<>)錛岃繖鏍峰仛璁╀漢浠洿鍔犺寰桟++ 鏄彧鏄唴鏍稿伐紼嬪笀浠殑緙栫▼璇█銆?
| 鍑芥暟鍘熷瀷 | 鍑芥暟鎻忚堪 |
| void *memcpy(void *s1,const void *s2, size_t n) | 鎶?/span>s2鎵鎸囩殑瀵硅薄涓殑n涓瓧絎﹀鍒跺埌s1鎵鎸囩殑瀵硅薄涓傝繑鍥?/span>s1緇撴灉鎸囬拡 |
| void *memmove(void *s1,const void *s2,size_t n) | 鍚?/span>memcpy,騫朵笖澶氳冭檻浜嗛噸鍙犳儏鍐碉紙Overlapping Buffers錛?/span> |
| int memcmp(const void *s1,const void *s2,size_t n) | s1鍜?/span>s2鎸囧悜瀵硅薄鐨勫墠n涓瓧絎︺傚鏋?/span>s1鎵鎸囧悜瀵硅薄鐨勫瓧絎︾瓑浜庛佸皬浜庢垨澶т簬s2鎵鎸囧悜瀵硅薄涓殑瀛楃錛岃繑鍥炲煎垎鍒瓑浜?/span>0銆?/span><0 銆?/span>>0 |
| void *memchr(const char *s,int c,size_t n) | 瀹氫綅s鐨勫墠n涓瓧絎﹂嬈″嚭鐜?/span>c鐨勪綅緗傛壘鍒板氨榪斿洖鎸囧悜瀹冪殑鎸囬拡錛屽惁鍒欒繑鍥?/span>0 |
| void *memset(void *s, int c,size_t n) | 鎶?/span>c澶嶅埗鍒?/span>s鎵鎸囩殑瀵硅薄鐨勫墠n涓瓧絎︿腑銆傝繑鍥炴寚鍚戠粨鏋滄寚閽?/span> |
| 鍑芥暟鍘熷瀷 | 鍑芥暟鎻忚堪 |
| char *strchr(const char *s,int c) | 鏌ユ壘c鍦?/span>s涓嬈″嚭鐜扮殑浣嶇疆錛屾垚鍔熷皢榪斿洖璇ヤ綅緗殑鎸囬拡錛屽惁鍒欒繑鍥?/span>NULL |
| size_t strcspn(const char *s1,const char *s2) | 璁$畻騫惰繑鍥?/span>s1涓笉鍖呭惈s2涓換浣曞瓧絎︾殑璧峰孌電殑闀垮害銆傚嵆鍦?/span>s1涓煡鎵炬槸鍚︽湁s2鐨勫瓧絎︼紝鑻ョ鍒版湁璇ュ瓧絎﹀垯榪斿洖浠庡紑濮嬶紙鏁版暟1寮濮嬶級鍒拌瀛楃涔嬪墠鐨勫瓧絎︿覆闀垮害銆?/span> |
size_t strspn(const char *s1,const char *s2) | 璁$畻騫惰繑鍥?/span>s1涓彧鍖呭惈s2涓瓧絎︾殑璧峰孌甸暱搴︺傚嵆褰撳湪s1涓病閬囧埌鍦?/span>s2涓殑瀛楃鏃訛紝榪斿洖浠庡紑濮嬪埌璇ュ瓧絎︿箣鍓嶇殑瀛楃涓茬殑闀垮害銆?/span> |
| char *strpbrk(const char *s1,const char *s2) | 瀹氫綅瀛楃涓?/span>s1棣栨鍑虹幇鍦ㄥ瓧絎︿覆s2涓瓧絎︾殑浣嶇疆銆傝嫢鎵懼埌浜嗗瓧絎︿覆s2涓殑瀛楃錛岃繑鍥炰竴涓寚鍚戝瓧絎︿覆s1涓瀛楃鐨勬寚閽堬紝鍚﹀垯榪斿洖NULL |
| char *strrchr(const char *s,int c) | 榪斿洖c鍦?/span>s涓渶鍚庝竴嬈″嚭鐜扮殑浣嶇疆鎸囬拡錛屽惁鍒欒繑鍥?/span>NULL |
char *strstr(const char *s1, const char *s2) | 榪斿洖s2鍦?/span>s1涓嬈″嚭鐜幫紙鏁翠釜瀛楃涓插尮閰嶏級鐨勪綅緗寚閽堬紝鍚﹀垯榪斿洖NULL |
| 鍑芥暟鍘熷瀷 | 鍑芥暟鎻忚堪 |
| double atof(const char *nPtr)聽 | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">double綾誨瀷 |
| int atoi(const char* nPtr)聽 | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">int綾誨瀷 |
| long atol(const char *nPtr) | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">long |
| double strtod(const char* nPtr,char **endPtr) | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">double綾誨瀷錛?span lang="EN-US">endPtr鎸囧悜nPtr涓涓涓笉鏄暟瀛楃殑瀛楃鐨勪綅緗?/span> |
| long strtol(const char *nPtr,char** endPtr, int base) | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">long綾誨瀷錛?span lang="EN-US">eendPtr鎸囧悜nPtr涓涓涓笉鏄暟瀛楃殑瀛楃鐨勪綅緗?/span>錛?span lang="EN-US">base鏄緟杞崲瀛楃涓蹭腑鏁板肩殑榪涘埗綾誨瀷錛?span lang="EN-US">0琛ㄧず鍙互鏄紙8銆?span lang="EN-US">10銆?span lang="EN-US">16錛夈備篃鍙槸2锝?span lang="EN-US">36涓換浣曞箋?/td> |
unsigned long strtoul(const char* nPtr,char **endPtr, int base) | 鎶婂瓧絎︿覆nPtr杞崲涓?span lang="EN-US">unsigned long綾誨瀷錛?span lang="EN-US">endPtr鎸囧悜nPtr涓涓涓笉鏄暟瀛楃殑瀛楃鐨勪綅緗?/span>錛?span lang="EN-US">base鏄緟杞崲瀛楃涓蹭腑鏁板肩殑榪涘埗綾誨瀷錛?span lang="EN-US">0琛ㄧず鍙互鏄紙8銆?span lang="EN-US">10銆?span lang="EN-US">16錛夈備篃鍙槸2锝?span lang="EN-US">36涓換浣曞箋?/td> |
| 鍑芥暟鍘熷瀷 | 鍑芥暟鎻忚堪 |
| int isdigit(int c) | 濡傛灉 c 鏄竴涓暟瀛楋紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int isalpha(int c) | 濡傛灉 c 鏄竴涓瓧姣嶏紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int isalnum(int c) | 濡傛灉 c 鏄竴涓瓧姣嶆垨鏁板瓧錛岃繑鍥?/span> true 錛屽惁鍒欒繑鍥?/span> false |
| int isxdigit(int c) |
濡傛灉 c 鏄竴涓崄鍏繘鍒跺瓧絎︼紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int islower(int c) | 濡傛灉 c 鏄竴涓皬鍐欏瓧姣嶏紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int isupper(int c) |
濡傛灉 c 鏄竴涓ぇ鍐欏瓧姣嶏紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int tolower(int c) |
濡傛灉c涓哄ぇ鍐欏瓧姣嶏紝榪斿洖鍏跺皬鍐欏瓧姣嶏紝鍚﹀垯榪斿洖鍘熷弬鏁?/span> |
|
int toupper(int c) |
濡傛灉c涓哄皬鍐欏瓧姣嶏紝 榪斿洖鍏跺ぇ鍐欏瓧姣嶏紝鍚﹀垯榪斿洖鍘熷弬鏁?/span> |
| int isspace(int c) | 濡傛灉 c 鏄竴涓┖鐧界錛岃繑鍥?/span> true 錛屽惁鍒欒繑鍥?/span> false 銆傜┖鐧界鍖呮嫭錛?/span> 鈥橽n鈥? 絀烘牸錛?/span> 鈥橽t鈥? , 鈥榎r鈥?, 榪涚焊絎︼紙 鈥橽f鈥?/span> 錛?/span> , 鍨傜洿鍒惰〃絎?/span> (鈥榎v鈥? |
| int iscntrl(int c) | 濡傛灉 c 鏄竴涓帶鍒剁錛岃繑鍥?/span> true 錛屽惁鍒欒繑鍥?/span> false |
| int ispunct(int c) |
濡傛灉 c 鏄竴涓櫎絀烘牸銆佹暟瀛楀拰瀛楁瘝澶栫殑鍙墦鍗板瓧絎︼紝榪斿洖 true,鍚﹀垯榪斿洖false |
| int isprint(int c) |
濡傛灉 c 鏄竴涓彲鎵撳嵃絎︼紙鍖呮嫭絀烘牸錛夛紝榪斿洖 true 錛屽惁鍒欒繑鍥?/span> false |
| int isgraph(int c) |
濡傛灉 c 鏄櫎絀烘牸涔嬪鐨勫彲鎵撳嵃瀛楃錛岃繑鍥?/span> true 錛屽惁鍒欒繑鍥?/span> false |
聽聽聽
鍦ㄥ墠闈紝杈撳叆錛忚緭鍑虹殑鏁版嵁娌℃湁鎸囧畾鏍煎紡錛屽畠浠兘鎸夌己鐪佺殑鏍煎紡杈撳叆錛忚緭鍑恒傜劧鑰岋紝鏈夋椂闇瑕佸鏁版嵁
鏍煎紡榪涜鎺у埗銆傝繖鏃墮渶鍒╃敤ios綾諱腑瀹氫箟鐨勬牸寮忔帶鍒舵垚鍛樺嚱鏁幫紝閫氳繃璋冪敤瀹冧滑鏉ュ畬鎴愭牸寮忕殑璁劇疆銆俰os綾葷殑鏍煎紡鎺у埗鍑芥暟濡備笅鎵紺猴細
| long flags( ) const | 榪斿洖褰撳墠鐨勬牸寮忔爣蹇椼?/font> |
| long flays(long newflag) | 璁劇疆鏍煎紡鏍囧織涓簄ewflag錛岃繑鍥炴棫鐨勬牸寮忔爣蹇椼?/font> |
| long setf(long bits) 聽 | 璁劇疆鎸囧畾鐨勬牸寮忔爣蹇椾綅錛岃繑鍥炴棫鐨勬牸寮忔爣蹇椼?/font> |
| long setf(long bits,long field) | 灝唂ield鎸囧畾鐨勬牸寮忔爣蹇椾綅緗負bits錛岃繑鍥炴棫鐨勬牸寮忔爣蹇椼?/font> |
| long unsetf(long bits) | 娓呴櫎bits鎸囧畾鐨勬牸寮忔爣蹇椾綅錛岃繑鍥炴棫鐨勬牸寮忔爣蹇椼?/font> |
| long fill(char c)聽 | 璁劇疆濉厖瀛楃錛岀己鐪佹潯浠朵笅鏄┖鏍箋?/font> |
| char fill( )聽 | 聽榪斿洖褰撳墠濉厖瀛楃銆?/font> |
| int precision(int val)聽 | 璁劇疆綺劇‘搴︿負val錛屾帶鍒惰緭鍑烘誕鐐規暟鐨勬湁鏁堜綅錛岃繑鍥炴棫鍊箋?/font> |
| int precision( ) | 榪斿洖鏃х殑綺劇‘搴﹀箋?/font> |
| int width(int val) 聽聽聽聽 | 璁劇疆鏄劇ず鏁版嵁鐨勫搴?鍩熷),榪斿洖鏃х殑鍩熷銆?/font> |
| int width( )聽 | 鍙繑鍥炲綋鍓嶅煙瀹斤紝緙虹渷瀹藉害涓?銆傝繖鏃舵彃鍏ユ搷浣滆兘鎸夎〃紺烘暟 鎹殑鏈灝忓搴︽樉紺烘暟鎹偮?/font> |
棰勫畾涔夌殑鎿嶇旱綆楀瓙
聽聽聽 浣跨敤鎴愬憳鍑芥暟鎺у埗鏍煎紡鍖栬緭鍏ヨ緭鍑烘椂錛屾瘡涓嚱鏁拌皟鐢ㄩ渶瑕佸啓涓鏉¤鍙ワ紝灝ゅ叾鏄畠涓嶈兘鐢ㄥ湪鎻掑叆鎴栨彁鍙栬繍綆楃鐨勮〃杈懼紡涓紝鑰屼嬌鐢ㄦ搷綰電畻瀛愶紝鍒欏彲浠ュ湪鎻掑叆鍜屾彁鍙栬繍綆楃鐨勮〃杈懼紡涓帶鍒舵牸寮忓寲杈?/font>
鍏ュ拰杈撳嚭銆傚湪紼嬪簭涓嬌鐢ㄦ搷綰電畻瀛楀繀欏誨祵鍏ュご鏂囦歡
iomanip.h
| dec | 鍗佽繘鍒剁殑杈撳叆杈撳嚭 |
| hex | 鍗佸叚榪涘埗鐨勮緭鍏ヨ緭鍑?/font> |
| oct 聽 | 鍏繘鍒剁殑杈撳叆杈撳嚭 |
| ws 聽 | 鎻愬彇絀虹櫧瀛楃 |
| ends 聽 | 杈撳嚭涓涓猲ul瀛楃 |
| endl | 聽 杈撳嚭涓涓崲琛屽瓧絎︼紝鍚屾椂鍒鋒柊嫻?/font> |
| flush | 鍒鋒柊嫻?/font> |
| resetiosflags(long) | 璇烽櫎鐗瑰畾鐨勬牸寮忔爣蹇椾綅 |
| setiosflags(long) | 璁劇疆鐗瑰畾鐨勬牸寮忔爣蹇椾綅 |
| setfill(char) | 璁劇疆濉厖瀛楃 |
| setprecision(int) | 璁劇疆杈撳嚭嫻偣鏁扮殑綺劇‘搴?/font> |
| setw(int) | 璁劇疆鍩熷鏍煎紡鍙橀噺 |
閿欒澶勭悊
聽聽聽 鍦ㄥ涓涓祦瀵硅薄榪涜I/O鎿嶄綔鏃訛紝鍙兘浼氫駭鐢熼敊璇傚綋閿欒鍙戠敓鏃訛紝閿欒鐨勬ц川琚褰曞湪ios綾葷殑涓涓暟鎹垚鍛樹腑銆?/font>
ios綾諱腑瀹氫箟鐨勬弿榪伴敊璇姸鎬佺殑甯擱噺:
| goodbit 聽 | 娌℃湁閿欒錛屾甯哥姸鎬併 eofbit 鍒拌揪嫻佺殑緇撳熬聽聽 |
| failbit | I/O鎿嶄綔澶辮觸錛屾竻闄ょ姸鎬佸瓧鍚庯紝鍙互瀵規祦緇х畫榪涜鎿嶄綔銆?/font> |
| badbit | 璇曞浘榪涜闈炴硶鎿嶄綔錛屾竻闄ょ姸鎬佸瓧鍚庯紝嫻佸彲鑳借繕鍙互浣跨敤銆?/font> |
| hardfail | 鑷村懡閿欒錛屼笉鍙仮澶嶇殑閿欒銆?/font> |
| 榪斿洖綾誨瀷 | ios綾葷殑鎴愬憳 | 鎻忋銆銆銆銆銆榪?/font> |
| ostream* | tie(ostream*) | 聽聽 灝嗗綋鍓嶆祦涓庢寚瀹氱殑杈撳嚭嫻佽繛鎺ヨ搗鏉ャ傛瘡褰撻渶瑕?璇誨彇褰撳墠嫻佹椂錛岃繛鎺ョ殑嫻佷細鑷姩鍒鋒柊銆侰++嫻佸簱宸茬敤cin.tie(cout)灝嗚緭鍏ユ祦涓庤緭鍑烘祦榪炴帴 璧鋒潵銆傝鍙栨秷涓庤緭鍑烘祦鐨勮繛鎺ュ彲閲囩敤is.tie(0) |
| ostream* | tie( ) | 榪斿洖鎸囧悜榪炴帴嫻佺殑鎸囬拡 |
| 榪斿洖綾誨瀷 | ostream綾葷殑鎴愬憳 | 鎻忋銆銆銆銆銆榪?/font> |
| ostream& | put(char ch) | 鍚戞祦涓緭鍑轟竴涓瓧絎h錛屼笉榪涜浠諱綍杞崲 |
| ostream& | write(char*,int) | 鍚戞祦涓緭鍑烘寚瀹氶暱搴︾殑瀛楃涓詫紝涓嶈繘琛岃漿鎹?/font> |
| ostream&聽 | flush( ) | 鍒鋒柊嫻侊紝杈撳嚭鎵鏈夌紦鍐茬殑浣嗚繕鏈緭鍑虹殑鏁版嵁 |
| ostream& | seekp(streampos) | 縐誨姩嫻佺殑褰撳墠鎸囬拡鍒扮粰瀹氱殑緇濆浣嶇疆 |
| ostream& | seekp(sereamoff,seek_dir) | 嫻佺殑褰撳墠鎸囬拡綾諱技涓庢枃浠剁殑褰撳墠鎸囬拡 |
| streampos | teelp( ) | 榪斿洖嫻佺殑褰撳墠鎸囬拡鐨勭粷瀵逛綅緗?/font> |
istream綾葷殑鎴愬憳鍑芥暟
| 榪斿洖綾誨瀷 | istream綾葷殑鎴愬憳 | 鎻忋銆銆銆銆銆銆銆榪?/font> |
| int | get( ) | 璇誨彇騫惰繑鍥炰竴涓瓧絎?/font> |
| istream& | get(char&c) | 璇誨彇瀛楃騫跺瓨鍏涓?/font> |
| istream& | get(char*ptr,int len,char delim='') | 璇誨彇鎸囧畾鐨勫瓧絎﹀埌緙撳啿鍖轟腑錛岀洿鍒伴亣鍒版寚瀹氱殑鍒嗙晫絎︿負姝紝鍒嗙晫絎︿笉濉叆緙撳啿鍖恒?/font> |
| istream& | getline(char*ptr,int len,char delim='') | 涓巊et(char*ptr,int len,chardelim =''錛?綾諱技錛屼絾灝嗗垎鐣岀濉?/font> 鍏ョ紦鍐插尯銆?/font> |
| istream& | putback( ) | 灝嗘渶榪戣鍙栫殑瀛楃鏀懼洖嫻佷腑 |
| istream& |
read(char*,int) |
璇誨彇瑙勫畾闀垮害鐨勫瓧絎︿覆鍒扮紦鍐插尯涓?br />鍑芥暟gcount()榪斿洖璇誨彇鐨勫瓧鑺傛暟 |
| int | peek( )聽 | 榪斿洖嫻佷腑涓嬩竴涓瓧絎︼紝浣嗕笉縐誨姩鏂?/font> 浠舵寚閽?/font> |
| istream& | seekg(streampos) | 縐誨姩褰撳墠鎸囬拡鍒頒竴緇濆鍦板潃 |
| istream&聽 | seekg(streampos,seek_dir) | 縐誨姩褰撳墠鎸囬拡鍒頒竴鐩稿鍦板潃 |
| streampos | tellg( ) | 榪斿洖褰撳墠鎸囬拡 |
| istream& | ignore(int n=1,delim=EOF) | 璺寵繃嫻佷腑鍑犱釜瀛楃錛屾垨鐩村埌閬囧埌鎸囧畾鐨勫垎鐣岀涓烘 |