锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欐槸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
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:
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:
Note that an expression such as:
is closely related to function-style casts supported by C++. For example:
鑰岀幇鍦ㄤ綘鎬誨簲璇ヨ繖鏍峰啓錛?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 />絎簩縐嶇壒孌婄殑綾誨瀷杞崲絎︽槸dynamic_cast錛屽畠琚敤浜庡畨鍏ㄥ湴娌跨潃綾葷殑緇ф壙鍏崇郴鍚戜笅榪涜綾誨瀷杞崲銆傝繖灝辨槸璇達紝浣犺兘鐢╠ynamic_cast鎶婃寚鍚戝熀綾葷殑鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚鎸囧悜鍏舵淳鐢熺被鎴栧叾鍏勫紵綾葷殑鎸囬拡鎴栧紩鐢紝鑰屼笖浣犺兘鐭ラ亾杞崲鏄惁鎴愬姛銆傚け璐ョ殑杞崲灝嗚繑鍥炵┖鎸囬拡錛堝綋瀵規寚閽堣繘琛岀被鍨嬭漿鎹㈡椂錛夋垨鑰呮姏鍑哄紓甯革紙褰撳寮曠敤榪涜綾誨瀷杞崲鏃訛級錛?br />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槸鍥犱負鏂扮殑綾誨瀷杞崲絎︾己涔忕編鎰熸墠鑳戒嬌瀹冨譏琛ヤ簡鍦ㄥ惈涔夌簿紜у拰鍙鯨璁ゆт笂鐨勭己鐐廣傚茍涓旓紝浣跨敤鏂扮被鍨嬭漿鎹㈢鐨勭▼搴忔洿瀹規槗琚В鏋愶紙涓嶈鏄浜哄伐榪樻槸瀵逛簬宸ュ叿紼嬪簭錛夛紝瀹冧滑鍏佽緙栬瘧鍣ㄦ嫻嬪嚭鍘熸潵涓嶈兘鍙戠幇鐨勯敊璇傝繖浜涢兘鏄斁寮僀椋庢牸綾誨瀷杞崲鏂規硶鐨勫己鏈夊姏鐨勭悊鐢便傝繕鏈夌涓変釜鐞嗙敱錛氫篃璁歌綾誨瀷杞崲絎︿笉緹庤鍜岄敭鍏ラ夯鐑︽槸涓浠跺ソ浜嬨?
]]>
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".
Using the explicit keyword, a constructor is declared to be
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
}
"nonconverting", and explicit constructor syntax is required:
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
));
}
A(47)
double d = 12.34;
int i = int(d);
]]>
聽鍦–++涓紝鏈変竴涓猻tream榪欎釜綾伙紝鎵鏈夌殑I/O閮戒互榪欎釜鈥滄祦鈥濈被涓哄熀紜鐨勶紝鍖呮嫭鎴戜滑瑕佽璇嗙殑鏂囦歡I/O錛宻tream榪欎釜綾繪湁涓や釜閲嶈鐨勮繍綆楃錛?
1銆佹彃鍏ュ櫒(<<)
銆銆鍚戞祦杈撳嚭鏁版嵁銆傛瘮濡傝緋葷粺鏈変竴涓粯璁ょ殑鏍囧噯杈撳嚭嫻?cout)錛屼竴鑸儏鍐典笅灝辨槸鎸囩殑鏄劇ず鍣紝鎵浠ワ紝cout<<"Write Stdout"<<'\n';灝辮〃紺烘妸瀛楃涓?Write Stdout"鍜屾崲琛屽瓧絎?'\n')杈撳嚭鍒版爣鍑嗚緭鍑烘祦銆?
2銆佹瀽鍙栧櫒(>>)
銆銆浠庢祦涓緭鍏ユ暟鎹傛瘮濡傝緋葷粺鏈変竴涓粯璁ょ殑鏍囧噯杈撳叆嫻?cin)錛屼竴鑸儏鍐典笅灝辨槸鎸囩殑閿洏錛屾墍浠ワ紝cin>>x;灝辮〃紺轟粠鏍囧噯杈撳叆嫻佷腑璇誨彇涓涓寚瀹氱被鍨?鍗沖彉閲弜鐨勭被鍨?鐨勬暟鎹?
銆銆鍦–++涓紝瀵規枃浠剁殑鎿嶄綔鏄氳繃stream鐨勫瓙綾籪stream(file stream)鏉ュ疄鐜扮殑錛屾墍浠ワ紝瑕佺敤榪欑鏂瑰紡鎿嶄綔鏂囦歡錛屽氨蹇呴』鍔犲叆澶存枃浠秄stream.h銆備笅闈㈠氨鎶婃綾葷殑鏂囦歡鎿嶄綔榪囩▼涓涓閬撴潵銆?
涓銆佹墦寮鏂囦歡
銆銆鍦╢stream綾諱腑錛屾湁涓涓垚鍛樺嚱鏁皁pen()錛屽氨鏄敤鏉ユ墦寮鏂囦歡鐨勶紝鍏跺師鍨嬫槸錛?
void open(const char* filename,int mode,int access);
鍙傛暟錛?
filename錛氥銆瑕佹墦寮鐨勬枃浠跺悕
mode錛氥銆銆銆瑕佹墦寮鏂囦歡鐨勬柟寮?
access錛氥銆銆鎵撳紑鏂囦歡鐨勫睘鎬?
鎵撳紑鏂囦歡鐨勬柟寮忓湪綾籭os(鏄墍鏈夋祦寮廔/O綾葷殑鍩虹被)涓畾涔夛紝甯哥敤鐨勫煎涓嬶細
ios::app錛氥銆銆浠ヨ拷鍔犵殑鏂瑰紡鎵撳紑鏂囦歡
ios::ate錛氥銆銆鏂囦歡鎵撳紑鍚庡畾浣嶅埌鏂囦歡灝撅紝ios:app灝卞寘鍚湁姝ゅ睘鎬?
ios::binary錛?銆浠ヤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡錛岀己鐪佺殑鏂瑰紡鏄枃鏈柟寮忋備袱縐嶆柟寮忕殑鍖哄埆瑙佸墠鏂?
ios::in錛氥銆銆 鏂囦歡浠ヨ緭鍏ユ柟寮忔墦寮
ios::out錛氥銆銆鏂囦歡浠ヨ緭鍑烘柟寮忔墦寮
ios::nocreate錛?涓嶅緩绔嬫枃浠訛紝鎵浠ユ枃浠朵笉瀛樺湪鏃舵墦寮澶辮觸銆
ios::noreplace錛氫笉瑕嗙洊鏂囦歡錛屾墍浠ユ墦寮鏂囦歡鏃跺鏋滄枃浠跺瓨鍦ㄥけ璐?
ios::trunc錛氥銆濡傛灉鏂囦歡瀛樺湪錛屾妸鏂囦歡闀垮害璁句負0
銆銆鍙互鐢ㄢ滄垨鈥濇妸浠ヤ笂灞炴ц繛鎺ヨ搗鏉ワ紝濡俰os::out|ios::binary
銆銆鎵撳紑鏂囦歡鐨勫睘鎬у彇鍊兼槸錛?
0錛氭櫘閫氭枃浠訛紝鎵撳紑璁塊棶
1錛氬彧璇繪枃浠?
2錛氶殣鍚枃浠?
4錛氱郴緇熸枃浠?
銆銆鍙互鐢ㄢ滄垨鈥濇垨鑰呪?鈥濇妸浠ヤ笂灞炴ц繛鎺ヨ搗鏉?錛屽3鎴?|2灝辨槸浠ュ彧璇誨拰闅愬惈灞炴ф墦寮鏂囦歡銆?
銆銆渚嬪錛氫互浜岃繘鍒惰緭鍏ユ柟寮忔墦寮鏂囦歡c:\config.sys
銆銆fstream file1;
銆銆file1.open("c:\\config.sys",ios::binary|ios::in,0);
銆銆濡傛灉open鍑芥暟鍙湁鏂囦歡鍚嶄竴涓弬鏁幫紝鍒欐槸浠ヨ/鍐欐櫘閫氭枃浠舵墦寮錛屽嵆錛?
銆銆file1.open("c:\\config.sys");<=>file1.open("c:\\config.sys",ios::in|ios::out,0);
銆銆鍙﹀錛宖stream榪樻湁鍜宱pen()涓鏍風殑鏋勯犲嚱鏁幫紝瀵逛簬涓婁緥錛屽湪瀹氫箟鐨勬椂渚氨鍙互鎵撳紑鏂囦歡浜嗭細
銆銆fstream file1("c:\\config.sys");
銆銆鐗瑰埆鎻愬嚭鐨勬槸錛宖stream鏈変袱涓瓙綾伙細ifstream(input file stream)鍜宱fstream(outpu file stream)錛宨fstream榛樿浠ヨ緭鍏ユ柟寮忔墦寮鏂囦歡錛岃宱fstream榛樿浠ヨ緭鍑烘柟寮忔墦寮鏂囦歡銆?
銆銆ifstream file2("c:\\pdos.def");//浠ヨ緭鍏ユ柟寮忔墦寮鏂囦歡
銆銆ofstream file3("c:\\x.123");//浠ヨ緭鍑烘柟寮忔墦寮鏂囦歡
銆銆鎵浠ワ紝鍦ㄥ疄闄呭簲鐢ㄤ腑錛屾牴鎹渶瑕佺殑涓嶅悓錛岄夋嫨涓嶅悓鐨勭被鏉ュ畾涔夛細濡傛灉鎯充互杈撳叆鏂瑰紡鎵撳紑錛屽氨鐢╥fstream鏉ュ畾涔夛紱濡傛灉鎯充互杈撳嚭鏂瑰紡鎵撳紑錛屽氨鐢╫fstream鏉ュ畾涔夛紱濡傛灉鎯充互杈撳叆/杈撳嚭鏂瑰紡鏉ユ墦寮錛屽氨鐢╢stream鏉ュ畾涔夈?
浜屻佸叧闂枃浠?
銆銆鎵撳紑鐨勬枃浠朵嬌鐢ㄥ畬鎴愬悗涓瀹氳鍏抽棴錛宖stream鎻愪緵浜嗘垚鍛樺嚱鏁癱lose()鏉ュ畬鎴愭鎿嶄綔錛屽錛歠ile1.close();灝辨妸file1鐩歌繛鐨勬枃浠跺叧闂?
涓夈佽鍐欐枃浠?
銆銆璇誨啓鏂囦歡鍒嗕負鏂囨湰鏂囦歡鍜屼簩榪涘埗鏂囦歡鐨勮鍙栵紝瀵逛簬鏂囨湰鏂囦歡鐨勮鍙栨瘮杈冪畝鍗曪紝鐢ㄦ彃鍏ュ櫒鍜屾瀽鍙栧櫒灝卞彲浠ヤ簡錛涜屽浜庝簩榪涘埗鐨勮鍙栧氨瑕佸鏉備簺錛屼笅瑕佸氨璇︾粏鐨勪粙緇嶈繖涓ょ鏂瑰紡
銆銆1銆佹枃鏈枃浠剁殑璇誨啓
銆銆鏂囨湰鏂囦歡鐨勮鍐欏緢綆鍗曪細鐢ㄦ彃鍏ュ櫒(<<)鍚戞枃浠惰緭鍑猴紱鐢ㄦ瀽鍙栧櫒(>>)浠庢枃浠惰緭鍏ャ傚亣璁緁ile1鏄互杈撳叆鏂瑰紡鎵撳紑錛宖ile2浠ヨ緭鍑烘墦寮銆傜ず渚嬪涓嬶細
銆銆file2<<"I Love You";//鍚戞枃浠跺啓鍏ュ瓧絎︿覆"I Love You"
銆銆int i;
銆銆file1>>i;//浠庢枃浠惰緭鍏ヤ竴涓暣鏁板箋?
銆銆榪欑鏂瑰紡榪樻湁涓縐嶇畝鍗曠殑鏍煎紡鍖栬兘鍔涳紝姣斿鍙互鎸囧畾杈撳嚭涓?6榪涘埗絳夌瓑錛屽叿浣撶殑鏍煎紡鏈変互涓嬩竴浜?
鎿嶇旱絎?鍔熻兘 杈撳叆/杈撳嚭
dec 鏍煎紡鍖栦負鍗佽繘鍒舵暟鍊兼暟鎹?杈撳叆鍜岃緭鍑?
endl 杈撳嚭涓涓崲琛岀騫跺埛鏂版嫻?杈撳嚭
ends 杈撳嚭涓涓┖瀛楃 杈撳嚭
hex 鏍煎紡鍖栦負鍗佸叚榪涘埗鏁板兼暟鎹?杈撳叆鍜岃緭鍑?
oct 鏍煎紡鍖栦負鍏繘鍒舵暟鍊兼暟鎹?杈撳叆鍜岃緭鍑?
setpxecision(int p) 璁劇疆嫻偣鏁扮殑綺懼害浣嶆暟 杈撳嚭
銆銆姣斿瑕佹妸123褰撲綔鍗佸叚榪涘埗杈撳嚭錛歠ile1<<<123;瑕佹妸3.1415926浠?浣嶇簿搴﹁緭鍑猴細FILE1<
銆銆2銆佷簩榪涘埗鏂囦歡鐨勮鍐?
鈶爌ut()
銆銆put()鍑芥暟鍚戞祦鍐欏叆涓涓瓧絎︼紝鍏跺師鍨嬫槸ofstream &put(char ch)錛屼嬌鐢ㄤ篃姣旇緝綆鍗曪紝濡俧ile1.put('c');灝辨槸鍚戞祦鍐欎竴涓瓧絎?c'銆?
鈶et()
銆銆get()鍑芥暟姣旇緝鐏墊椿錛屾湁3縐嶅父鐢ㄧ殑閲嶈澆褰㈠紡錛?
銆銆涓縐嶅氨鏄拰put()瀵瑰簲鐨勫艦寮忥細ifstream &get(char &ch);鍔熻兘鏄粠嫻佷腑璇誨彇涓涓瓧絎︼紝緇撴灉淇濆瓨鍦ㄥ紩鐢╟h涓紝濡傛灉鍒版枃浠跺熬錛岃繑鍥炵┖瀛楃銆傚file2.get(x);琛ㄧず浠庢枃浠朵腑璇誨彇涓涓瓧絎︼紝騫舵妸璇誨彇鐨勫瓧絎︿繚瀛樺湪x涓?
銆銆鍙︿竴縐嶉噸杞藉艦寮忕殑鍘熷瀷鏄細 int get();榪欑褰㈠紡鏄粠嫻佷腑榪斿洖涓涓瓧絎︼紝濡傛灉鍒拌揪鏂囦歡灝撅紝榪斿洖EOF錛屽x=file2.get();鍜屼笂渚嬪姛鑳芥槸涓鏍風殑銆?
銆銆榪樻湁涓縐嶅艦寮忕殑鍘熷瀷鏄細ifstream &get(char *buf,int num,char delim='\n')錛涜繖縐嶅艦寮忔妸瀛楃璇誨叆鐢?buf 鎸囧悜鐨勬暟緇勶紝鐩村埌璇誨叆浜?num 涓瓧絎︽垨閬囧埌浜嗙敱 delim 鎸囧畾鐨勫瓧絎︼紝濡傛灉娌′嬌鐢?delim 榪欎釜鍙傛暟錛屽皢浣跨敤緙虹渷鍊兼崲琛岀'\n'銆備緥濡傦細
銆銆file2.get(str1,127,'A');//浠庢枃浠朵腑璇誨彇瀛楃鍒板瓧絎︿覆str1錛屽綋閬囧埌瀛楃'A'鎴栬鍙栦簡127涓瓧絎︽椂緇堟銆?
鈶㈣鍐欐暟鎹潡
銆銆瑕佽鍐欎簩榪涘埗鏁版嵁鍧楋紝浣跨敤鎴愬憳鍑芥暟read()鍜寃rite()鎴愬憳鍑芥暟錛屽畠浠師鍨嬪涓嬶細
銆銆銆銆read(unsigned char *buf,int num);
銆銆銆銆write(const unsigned char *buf,int num);
銆銆read()浠庢枃浠朵腑璇誨彇 num 涓瓧絎﹀埌 buf 鎸囧悜鐨勭紦瀛樹腑錛屽鏋滃湪榪樻湭璇誨叆 num 涓瓧絎︽椂灝卞埌浜嗘枃浠跺熬錛屽彲浠ョ敤鎴愬憳鍑芥暟 int gcount();鏉ュ彇寰楀疄闄呰鍙栫殑瀛楃鏁幫紱鑰?write() 浠巄uf 鎸囧悜鐨勭紦瀛樺啓 num 涓瓧絎﹀埌鏂囦歡涓紝鍊煎緱娉ㄦ剰鐨勬槸緙撳瓨鐨勭被鍨嬫槸 unsigned char *錛屾湁鏃跺彲鑳介渶瑕佺被鍨嬭漿鎹€?
渚嬶細
銆銆銆銆unsigned char str1[]="I Love You";
銆銆銆銆int n[5];
銆銆銆銆ifstream in("xxx.xxx");
銆銆銆銆ofstream out("yyy.yyy");
銆銆銆銆out.write(str1,strlen(str1));//鎶婂瓧絎︿覆str1鍏ㄩ儴鍐欏埌yyy.yyy涓?
銆銆銆銆in.read((unsigned char*)n,sizeof(n));//浠巟xx.xxx涓鍙栨寚瀹氫釜鏁存暟錛屾敞鎰忕被鍨嬭漿鎹?
銆銆銆銆in.close();out.close();
鍥涖佹嫻婨OF
銆銆鎴愬憳鍑芥暟eof()鐢ㄦ潵媯嫻嬫槸鍚﹀埌杈炬枃浠跺熬錛屽鏋滃埌杈炬枃浠跺熬榪斿洖闈?鍊鹼紝鍚﹀垯榪斿洖0銆傚師鍨嬫槸int eof();
渚嬶細銆銆if(in.eof())ShowMessage("宸茬粡鍒拌揪鏂囦歡灝撅紒");
浜斻佹枃浠跺畾浣?
銆銆鍜孋鐨勬枃浠舵搷浣滄柟寮忎笉鍚岀殑鏄紝C++ I/O緋葷粺綆$悊涓や釜涓庝竴涓枃浠剁浉鑱旂郴鐨勬寚閽堛備竴涓槸璇繪寚閽堬紝瀹冭鏄庤緭鍏ユ搷浣滃湪鏂囦歡涓殑浣嶇疆錛涘彟涓涓槸鍐欐寚閽堬紝瀹冧笅嬈″啓鎿嶄綔鐨勪綅緗傛瘡嬈℃墽琛岃緭鍏ユ垨杈撳嚭鏃訛紝鐩稿簲鐨勬寚閽堣嚜鍔ㄥ彉鍖栥傛墍浠ワ紝C++鐨勬枃浠跺畾浣嶅垎涓鴻浣嶇疆鍜屽啓浣嶇疆鐨勫畾浣嶏紝瀵瑰簲鐨勬垚鍛樺嚱鏁版槸 seekg()鍜?seekp()錛宻eekg()鏄緗浣嶇疆錛宻eekp鏄緗啓浣嶇疆銆傚畠浠渶閫氱敤鐨勫艦寮忓涓嬶細
銆銆銆銆istream &seekg(streamoff offset,seek_dir origin);
銆銆銆銆ostream &seekp(streamoff offset,seek_dir origin);
銆銆streamoff瀹氫箟浜?iostream.h 涓紝瀹氫箟鏈夊亸縐婚噺 offset 鎵鑳藉彇寰楃殑鏈澶у鹼紝seek_dir 琛ㄧず縐誨姩鐨勫熀鍑嗕綅緗紝鏄竴涓湁浠ヤ笅鍊肩殑鏋氫婦錛?
ios::beg錛氥銆鏂囦歡寮澶?
ios::cur錛氥銆鏂囦歡褰撳墠浣嶇疆
ios::end錛氥銆鏂囦歡緇撳熬
銆銆榪欎袱涓嚱鏁頒竴鑸敤浜庝簩榪涘埗鏂囦歡錛屽洜涓烘枃鏈枃浠朵細鍥犱負緋葷粺瀵瑰瓧絎︾殑瑙i噴鑰屽彲鑳戒笌棰勬兂鐨勫間笉鍚屻?
渚嬶細
銆銆銆銆 file1.seekg(1234,ios::cur);//鎶婃枃浠剁殑璇繪寚閽堜粠褰撳墠浣嶇疆鍚戝悗縐?234涓瓧鑺?
銆銆銆銆 file2.seekp(1234,ios::beg);//鎶婃枃浠剁殑鍐欐寚閽堜粠鏂囦歡寮澶村悜鍚庣Щ1234涓瓧鑺?/setpxecision(5)>
]]>
渚嬪
template<typename T>
inline T const & max(T const &a,T const &b)
{
聽聽聽return聽聽聽a>b?a:b;
}
2.Function template鍙互浠庝紶閫掕繃鏉ョ殑arguments鐨勭被鍨嬫潵鍏蜂綋鍖?br />int a = ::max(10,20);
閭d箞Function template 灝卞叿浣撳寲涓?br />inline int const& max(int const &a,int const & b)
3.浣犲彲浠ュ叿浣撴寚鍑哄畠鐨勫弬鏁扮被鍨?br />int a = ::max<int>(10,20);
4.Function template鍙互琚噸杞給verloaded
inline T const& max(T const &a,T const &b,T const &c)
{
聽聽聽return ::max(::max(a,b),c);
}
褰撶劧璁頒綇涓鐐癸紝閲嶈澆鐨勭浉浼肩偣瓚婂皬瓚婂ソ
]]>
http://community.csdn.net/Expert/topic/5279/5279199.xml?temp=.2457392
鍦ㄦ枃绔犱腑澶у鍦ㄨ璁轟竴涓棶棰?
濡傛灉娌℃湁瀛樺偍涓婃病鏈夊尯鍒殑璇?璇風湅涓嬩緥錛?br />float a=3.45;
int * p1=&a;
float * p2=&a;
cout<<"p1"<<"=>"<<*p1<<endl;
cout<<"p2"<<"=>"<<*p2<<endl;
緇撴灉鏄細
p1=>1107951616
p2=>3.45
涔︿笂鐨勮В閲婃槸錛歱1灝界涓巔2鐨勫湴鍧鐩稿悓錛屼絾瀹冩槸鏁村瀷鎸囬拡錛屽畠鎬繪槸璁塊棶璇ュ湴鍧涓殑鏁村瀷鏁般?br />棣栧厛鍦?2浣岰PU涓婇潰,鎸囬拡閮芥槸4浣嶇殑,渚嬪0xXX XX XX XX
閭d箞鏃㈢劧鎸囬拡鏄竴鏍風殑,閭d箞涓轟粈涔堟寚閽堢被鍨嬩笉鍚岀殑璇?璇誨嚭鏉ョ殑鏁版嵁灝卞彉浜嗘牱鍛?
榪欐槸緙栬瘧鍣ㄧ殑闂,渚嬪鎴戞湁涓緥瀛?br />
char *p = 'c';
int *p1 = 10;
鍦?2浣嶆満鍣ㄤ笂闈?br />榪欓噷闈1鏄寚鍚?瀛楄妭鐨刬nt鍙橀噺,鑰宲鏄寚鍚?瀛楄妭鐨刢har 鍙橀噺
榪欐牱緙栬瘧鍣ㄥ湪鐢╬1鍙橀噺鐨勬椂鍊?浼氬彇0x XX XX XX XX鍚庨潰鐨?涓瓧鑺?br />鑰宲鍙橀噺,鍙細鍙?x XX XX XX XX鍚庨潰鐨?涓瓧鑺?br />
鍥犱負鏈漢鐜板湪鍦ㄧ綉鍚ч噷闈涓嶇煡閬撳ぇ瀹舵湁娌℃湁鍦ㄧ綉鍚ч噷闈㈢鍒拌鏈塩++緙栬瘧鍣ㄧ殑璁$畻鏈篯
鏅氫笂鎴戠粰澶у涓涓緥瀛?鍙互浠庡叾鍐呭瓨涓婇潰鐪嬬殑寰堟竻妤?/font>
妯℃澘姒傚康
娉涘瀷緙栫▼
璁捐鏂版濈淮
鍙傝冩枃鐚?
|
緇檆++紼嬪簭鍛樼殑涓浠界ぜ鐗┾斺斿父鐢ㄥ伐鍏烽泦聽
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
聽銆鎵璋?宸ユ鍠勫叾浜嬶紝蹇呭厛鍒╁叾鍣?錛屼粠紼嬪簭鍛樼殑瑙掑害鏉ヨ錛屽ソ宸ュ叿鐨勪嬌鐢ㄦ諱細緇欎漢甯︽潵浜嬪崐鍔熷嶇殑鏁堟灉銆傞潰瀵逛紬澶氬伐鍏?杞歡錛屾垜浠簲璇ュ浣曞彇鑸嶅憿銆傚墠涓嶄箙錛岀瑪鑰呭湪csdn鐨刢++璁哄潧鍙戜簡涓綃?/font> 璐存枃 錛屼互鏈熻兘寰佹眰澶у鐨勫箍娉涙剰瑙侊紝寰楀埌浜嗕笉閿欑殑鍙嶅搷銆傛湰鏂囧湪瀵硅璐磋繘琛屾暣鐞嗙殑鍩虹涓婏紝鍙堝仛浜嗕竴浜涜ˉ鍏呫傚湪榪欓噷瑕佺壒鍒劅璋㈢綉鍙嬶細DanielWYO(鐖變笂灝忕櫧)錛宺edleaves(鏃犲績綰㈠彾)銆? 鏈変互涓嬪嚑鐐歸渶瑕佸0鏄庯細
寮鍙戠幆澧?/font>
杈呭姪
紼嬪簭緙栬緫鍣?/font>
UML/寤烘ā
鐗堟湰鎺у埗
鍏朵粬鐨勭増鏈鐞嗗伐鍏瘋繕鍖呮嫭錛歅VCS銆乂CS銆丷CS絳夈? XML
嫻嬭瘯
鍏朵粬鐨凴ational嫻嬭瘯宸ュ叿榪樺寘鎷細TestFactory銆丳ureCoverage銆乀estManager絳夈? 鏃ュ織
娉ㄩ噴
|
void main()
{
聽char *str = NULL;
聽GetMemory(str,100);
聽strcpy(str,"Hello World");//鍑洪敊
}
棣栧厛鎴戜滑鍏堢湅鐪媋sm
004010B8聽聽 mov聽聽聽聽聽聽聽聽 dword ptr [ebp-4],0
004010BF聽聽 push聽聽聽聽聽聽聽 64h
004010C1聽聽 mov聽聽聽聽聽聽聽聽 eax,dword ptr [ebp-4]
004010C4聽聽 push聽聽聽聽聽聽聽 eax
004010C5聽聽 call聽聽聽聽聽聽聽 @ILT+50(GetMemory) (00401037)
str 鍦板潃:12FF7C
鍏跺壇鏈湴鍧:12FF28
鍦ㄥ瓨鍏ュ弬鏁扮殑鏃跺?鍚屾椂閮芥寚鍚?0 00 00 00
鍦ㄦ墽琛宲 = (char*)malloc(sizeof(char)*num);涔嬪悗
12FF28鎸囧悜鐨勫唴瀹瑰彉鎴愪簡20 1C 43 00浜?
鏋楅攼鍗氬+鍦ㄨ繖杈圭殑鎰忔濇槸鍙敤鎸囧悜鎸囬拡鐨勬寚閽?榪欑鏂規硶鎴戜滑鍦ㄧ浜岀鏂規硶縐嶄粙緇?
涓嬮潰緇欏嚭鎴戠殑涓縐嶇湅娉?澶у瑙夊緱濂戒笉濂?br />鎴戠殑鏂規硶:
char *GetMemory(char *p,int num)
{
聽p = (char*)malloc(sizeof(char)*num);
聽return p;
}
void main()
{
聽char *str = NULL;
聽str = GetMemory(str,100);
聽strcpy(str,"Hello World");
聽cout<<str<<endl;
}
鍙互綆鍖栦負:
char *GetMemory(int num)
{
聽char *p = (char*)malloc(sizeof(char)*num);
聽return p;
}
void main()
{
聽char *str = NULL;
聽str = GetMemory(100);
聽strcpy(str,"Hello World");
聽cout<<str<<endl;
}
鏋楅攼鍗氬+鐨勭湅娉?
void GetMemory(char **p,int num)
{
聽聽聽*p = (char*)malloc(sizeof(char)*num);
}
void main()
{
聽聽聽char *str = NULL;
聽聽聽GetMemory(&str,100);
聽聽聽strcpy(str,"Hello,World");
聽聽聽cout <<str<<endl;
}
璁捐鏇村鐨勮娉曠殑璦璁恒傜幇瀹炰腑錛孋++鐨勫簱闂ㄧ被綣佸錛岃В鍐崇殑闂涔熸槸鏋佸叾騫挎硾錛屽簱浠庤交閲忕駭鍒伴噸閲忕駭
鐨勯兘鏈夈備笉灝戦兘鏄浜虹溂鐣屽ぇ寮錛屼害鎴栨槸鏈涜岀敓鍙圭殑鎬濈淮鏉頒綔銆傜敱浜庡簱鐨勬暟閲忛潪甯稿簽澶э紝鑰屼笖闄愪簬絎旇?/font>
姘村鉤錛屽叾涓緢澶氬茍涓嶄簡瑙c傛墍浠ユ枃涓墍鎻愮殑涓浜涘簱閮芥槸姣旇緝钁楀悕鐨勫ぇ鍨嬪簱銆?/font>
鏍囧噯搴?/font>
鏍囧噯搴撲腑鎻愪緵浜咰++紼嬪簭鐨勫熀鏈鏂姐傝櫧鐒禖++鏍囧噯搴撻殢鐫C++鏍囧噯鎶樿吘浜嗚澶氬勾錛岀洿鍒版爣鍑嗙殑鍑哄彴鎵嶆
寮忓畾鍨嬶紝浣嗘槸鍦ㄦ爣鍑嗗簱鐨勫疄鐜頒笂鍗村緢浠や漢嬈f叞寰楃湅鍒板縐嶅疄鐜幫紝騫朵笖宸茶瀹炶返璇佹槑涓烘湁宸ヤ笟綰у埆寮哄害鐨?/font>
浣充綔銆?/font>
1銆伮犅?Dinkumware C++ Library
聽聽聽聽聽聽聽聽聽鍙傝冪珯鐐癸細 http://www.dinkumware.com
P.J. Plauger緙栧啓鐨勯珮鍝佽川鐨勬爣鍑嗗簱銆侾.J. Plauger鍗氬+鏄疍r. Dobb's紼嬪簭璁捐鏉板嚭濂栫殑鑾峰緱鑰呫傚叾緙?/font>
鍐欑殑搴撻暱鏈熻Microsoft閲囩敤錛屽茍涓旀渶榪態orland涔熷彇寰椾簡鍏禣EM鐨刲icense錛屽湪鍏禖/C++鐨勪駭鍝佷腑閲囩敤
Dinkumware鐨勫簱銆?/font>
2銆伮犅?RogueWave Standard C++ Library
聽聽聽聽聽聽聽聽聽鍙傝冪珯鐐癸細 http://www.roguewave.com/
榪欎釜搴撳湪Borland C++ Builder鐨勬棭鏈熺増鏈腑鏇劇粡琚噰鐢紝鍚庢潵琚叾浠栫殑搴撶粰鏇挎崲浜嗐傜瑪鑰呬笉鎺ㄨ崘 銆?/font>
3銆丼GI STL
聽聽聽聽聽聽聽聽聽鍙傝冪珯鐐癸細 http://www.roguewave.com/
SGI鍏徃鐨凜++鏍囧噯妯$増搴撱?/font>
4銆丼TLport
聽聽聽聽聽聽聽聽聽鍙傝冪珯鐐癸細 http://www.stlport.org
SGI STL搴撶殑璺ㄥ鉤鍙板彲縐繪鐗堟湰銆?/font>
鍑嗘爣鍑嗗簱鈥斺擝oost
Boost搴撴槸涓涓粡榪囧崈閿ょ櫨鐐箋佸彲縐繪銆佹彁渚涙簮浠g爜鐨凜++搴擄紝浣滀負鏍囧噯搴撶殑鍚庡錛屾槸C++鏍囧噯鍖栬繘紼嬬殑
鍙戝姩鏈轟箣涓銆?Boost搴撶敱C++鏍囧噯濮斿憳浼氬簱宸ヤ綔緇勬垚鍛樺彂璧鳳紝鍦–++紺懼尯涓獎鍝嶇敋澶э紝鍏舵垚鍛樺凡榪?000浜?/font>
銆?Boost搴撲負鎴戜滑甯︽潵浜嗘渶鏂般佹渶閰楓佹渶瀹炵敤鐨勬妧鏈紝鏄笉鎶樹笉鎵g殑鈥滃噯鈥濇爣鍑嗗簱銆?/font>
Boost涓瘮杈冩湁鍚嶆皵鐨勬湁榪欎箞鍑犱釜搴擄細
Regex
姝e垯琛ㄨ揪寮忓簱
Spirit
LL parser framework錛岀敤C++浠g爜鐩存帴琛ㄨ揪EBNF
Graph
鍥劇粍浠跺拰綆楁硶
Lambda
鍦ㄨ皟鐢ㄧ殑鍦版柟瀹氫箟鐭皬鍖垮悕鐨勫嚱鏁板璞★紝寰堝疄鐢ㄧ殑functional鍔熻兘
concept check
媯鏌ユ硾鍨嬬紪紼嬩腑鐨刢oncept
Mpl
鐢ㄦā鏉垮疄鐜扮殑鍏冪紪紼嬫鏋?/font>
Thread
鍙Щ妞嶇殑C++澶氱嚎紼嬪簱
Python
鎶奀++綾誨拰鍑芥暟鏄犲皠鍒癙ython涔嬩腑
Pool
鍐呭瓨姹犵鐞?/font>
smart_ptr
5涓櫤鑳芥寚閽堬紝瀛︿範鏅鴻兘鎸囬拡蹇呰錛屼竴浠戒笉閿欑殑鍙傝冩槸鏉ヨ嚜CUJ鐨勬枃绔狅細
Smart Pointers in Boost,鍝︼紝榪欑瘒鏂囩珷鍙互鏌ュ埌錛孋UJ鏄彁渚涘湪綰挎祻瑙堢殑銆備腑鏂囩増瑙佺瑪鑰呭湪銆奃r.
Dobb's Journal杞歡鐮斿彂鏉傚織銆嬬7杈戜笂鐨勮瘧鏂囥?/font>
Boost鎬諱綋鏉ヨ鏄疄鐢ㄤ環鍊煎緢楂橈紝璐ㄩ噺寰堥珮鐨勫簱銆傚茍涓旂敱浜庡叾瀵硅法騫沖彴鐨勫己璋冿紝瀵規爣鍑咰++鐨勫己璋冿紝鏄紪
鍐欏鉤鍙版棤鍏籌紝鐜頒唬C++鐨勫紑鍙戣呭繀澶囩殑宸ュ叿銆備絾鏄疊oost涓篃鏈夊緢澶氭槸瀹為獙鎬ц川鐨勪笢瑗匡紝鍦ㄥ疄闄呯殑寮鍙戜腑
瀹炵敤闇瑕佽皚鎱庛傚茍涓斿緢澶欱oost涓殑搴撳姛鑳藉牚縐板璇█鍔熻兘鐨勬墿灞曪紝鍏舵瀯閫犵敤灝界簿宸х殑鎵嬫硶錛屼笉瑕佽錘鐒?/font>
鐨勮姳璐規椂闂寸爺璇匯侭oost鍙﹀涓闈紝姣斿Graph榪欐牱鐨勫簱鍒欐槸鍏鋒湁宸ヤ笟寮哄害錛岀粨鏋勮壇濂斤紝闈炲父鍊煎緱鐮旇鐨?/font>
綺懼搧浠g爜錛屽茍涓斾篃鍙互鏀懼績鐨勫湪浜у搧浠g爜涓澶氬埄鐢ㄣ?/font>
聽聽聽聽聽聽聽聽聽鍙傝冪珯鐐癸細
http://www.boost.org聽
聽聽聽聽聽聽聽聽聽錛堝浗鍐呴暅鍍忥細
http://www.c-view.org/tech/lib/boost/index.htm
錛?/font>
GUI
鍦ㄤ紬澶欳++鐨勫簱涓紝GUI閮ㄥ垎鐨勫簱綆楁槸姣旇緝綣佽崳錛屼篃姣旇緝寮曚漢娉ㄧ洰鐨勩傚湪瀹為檯寮鍙戜腑錛孏UI搴撶殑閫夋嫨涔熸槸
闈炲父閲嶈鐨勪竴浠朵簨鎯咃紝涓嬮潰鎴戜滑緇艱堪涓涓嬪彲閫夋嫨鐨凣UI搴擄紝鍚勮嚜鐨勭壒鐐逛互鍙婄浉鍏沖伐鍏風殑鏀寔銆?/font>
1銆伮犅?MFC
澶у悕榧庨紟鐨勫井杞熀紜綾誨簱錛圡icrosoft Foundation Class錛夈傚ぇ鍑″榪嘨C++鐨勪漢閮藉簲璇ョ煡閬撹繖涓簱銆傝櫧
鐒朵粠鎶鏈搴﹁錛孧FC鏄笉澶ф紓浜殑錛屼絾鏄畠鏋勫緩浜嶹indows API 涔嬩笂錛岃兘澶熶嬌紼嬪簭鍛樼殑宸ヤ綔鏇村鏄?緙?/font>
紼嬫晥鐜囬珮錛屽噺灝戜簡澶ч噺鍦ㄥ緩绔?Windows 紼嬪簭鏃跺繀欏葷紪鍐欑殑浠g爜錛屽悓鏃跺畠榪樻彁渚涗簡鎵鏈変竴鑸?C++ 緙栫▼鐨?/font>
浼樼偣錛屼緥濡傜戶鎵垮拰灝佽銆侻FC 緙栧啓鐨勭▼搴忓湪鍚勪釜鐗堟湰鐨刉indows鎿嶄綔緋葷粺涓婃槸鍙Щ妞嶇殑錛屼緥濡傦紝鍦?
Windows 3.1涓嬬紪鍐欑殑浠g爜鍙互寰堝鏄撳湴縐繪鍒?Windows NT 鎴?Windows 95 涓娿備絾鏄湪鏈榪戝彂灞曚互鍙?/font>
瀹樻柟鏀寔涓婃棩娓愬娍寰?/font>
2銆伮犅?QT聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.trolltech.com/
Qt鏄疶rolltech鍏徃鐨勪竴涓騫沖彴鐨凜++鍥懼艦鐢ㄦ埛鐣岄潰搴旂敤紼嬪簭妗嗘灦銆傚畠鎻愪緵緇欏簲鐢ㄧ▼搴忓紑鍙戣呭緩绔嬭壓鏈?/font>
綰х殑鍥懼艦鐢ㄦ埛鐣岄潰鎵闇鐨勬墍鐢ㄥ姛鑳姐俀t鏄畬鍏ㄩ潰鍚戝璞$殑寰堝鏄撴墿灞曪紝騫朵笖鍏佽鐪熸鍦扮粍浠剁紪紼嬨傝嚜浠?/font>
1996騫存棭浜涙椂鍊欙紝Qt榪涘叆鍟嗕笟棰嗗煙錛屽畠宸茬粡鎴愪負鍏ㄤ笘鐣岃寖鍥村唴鏁板崈縐嶆垚鍔熺殑搴旂敤紼嬪簭鐨勫熀紜銆俀t涔熸槸嫻?/font>
琛岀殑Linux妗岄潰鐜KDE 鐨勫熀紜錛屽悓鏃跺畠榪樻敮鎸乄indows銆丮acintosh銆乁nix/X11絳夊縐嶅鉤鍙般?/font>
3銆乄xWindows聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.wxwindows.org/
璺ㄥ鉤鍙扮殑GUI搴撱傚洜涓哄叾綾誨眰嬈℃瀬鍍廙FC錛屾墍浠ユ湁鏂囩珷浠嬬粛浠嶮FC鍒癢xWindows鐨勪唬鐮佺Щ妞嶄互瀹炵幇璺ㄥ鉤鍙扮殑
鍔熻兘銆傞氳繃澶氬勾鐨勫紑鍙戜篃鏄竴涓棩瓚嬪畬鍠勭殑GUI搴擄紝鏀寔鍚屾牱涓嶅急浜庡墠闈袱涓簱銆傚茍涓旀槸瀹屽叏寮鏀炬簮浠?/font>
鐮佺殑銆傛柊榪戠殑C++ Builder X鐨凣UI璁捐鍣ㄥ氨鏄熀浜庤繖涓簱鐨勩?/font>
4銆丗ox聽聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.fox-toolkit.org/
寮鏀炬簮浠g爜鐨凣UI搴撱備綔鑰呬粠鑷繁浜茶韓鐨勫紑鍙戠粡楠屼腑寰楀嚭浜嗕竴涓悊鎯崇殑GUI搴撳簲璇ユ槸浠涔堟牱瀛愮殑鎰熷彈鍑哄彂
錛屼粠鑰屽紑濮嬩簡瀵硅繖涓簱鐨勫紑鍙戙傛湁鍏磋叮鐨勫彲浠ュ皾璇曚竴涓嬨?/font>
5銆乄TL
鍩轟簬ATL鐨勪竴涓簱銆傚洜涓轟嬌鐢ㄤ簡澶ч噺ATL鐨勮交閲忕駭鎵嬫硶錛屾ā鏉跨瓑鎶鏈紝鍦ㄤ唬鐮佸昂瀵革紝浠ュ強閫熷害浼樺寲鏂歸潰鍋?/font>
寰楅潪甯稿埌浣嶃備富瑕侀潰鍚戠殑浣跨敤緹や綋鏄紑鍙慍OM杞婚噺綰т緵緗戠粶涓嬭澆鐨勫彲瑙嗗寲鎺т歡鐨勫紑鍙戣呫?/font>
6銆丟TK聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://gtkmm.sourceforge.net/
GTK鏄竴涓ぇ鍚嶉紟榧庣殑C鐨勫紑婧怗UI搴撱傚湪Linux涓栫晫涓湁Gnome榪欐牱鐨勬潃鎵嬪簲鐢ㄣ傝孏TK灝辨槸榪欎釜搴撶殑C++
灝佽鐗堟湰銆?/font>
緗戠粶閫氫俊
ACE聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.cs.wustl.edu/~schmidt/ACE.html
C++搴撶殑浠h〃錛岃秴閲嶉噺綰х殑緗戠粶閫氫俊寮鍙戞鏋躲侫CE鑷傞厤閫氫俊鐜錛圓daptive Communication
Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮浠g爜鐨勯潰鍚戝璞℃鏋訛紝鍦ㄥ叾涓疄鐜頒簡璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨?/font>
鏍稿績妯″紡銆侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++鍖呰澶栬錛圵rapper Facade錛夊拰妗嗘灦緇勪歡錛屽彲璺ㄨ秺澶氱騫沖彴
瀹屾垚閫氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼?/font>
闂撮氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑絳夈?/font>
StreamModule聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.omnifarious.org/StrMod/
璁捐鐢ㄤ簬綆鍖栫紪鍐欏垎甯冨紡紼嬪簭鐨勫簱銆傚皾璇曠潃浣垮緱緙栧啓澶勭悊寮傛琛屼負鐨勭▼搴忔洿瀹規槗錛岃屼笉鏄敤鍚屾鐨勫澹?/font>
鍖呰搗寮傛鐨勬湰璐ㄣ?/font>
SimpleSocket聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://home.hetnet.nl/~lcbokkers/simsock.htm
榪欎釜綾誨簱璁╃紪鍐欏熀浜巗ocket鐨勫鎴?鏈嶅姟鍣ㄧ▼搴忔洿鍔犲鏄撱?/font>
A Stream Socket API for C++
聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細聽聽聽聽http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html
鍙堜竴涓Socket鐨勫皝瑁呭簱銆?/font>
XML
Xerces聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://xml.apache.org/xerces-c/
Xerces-C++ 鏄竴涓潪甯稿仴澹殑XML瑙f瀽鍣紝瀹冩彁渚涗簡楠岃瘉錛屼互鍙奡AX鍜孌OM API銆俋ML楠岃瘉鍦ㄦ枃妗g被鍨嬪畾
涔?Document Type Definition錛孌TD)鏂歸潰鏈夊緢濂界殑鏀寔錛屽茍涓斿湪2001騫?2鏈堝鍔犱簡鏀寔W3C XML
Schema 鐨勫熀鏈畬鏁寸殑寮鏀炬爣鍑嗐?/font>
XMLBooster聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.xmlbooster.com/
榪欎釜搴撻氳繃浜х敓鐗瑰埗鐨刾arser鐨勫姙娉曟瀬澶х殑鎻愰珮浜哫ML瑙f瀽鐨勯熷害錛屽茍涓旇兘澶熶駭鐢熺浉搴旂殑GUI紼嬪簭鏉ヤ慨鏀?/font>
榪欎釜parser銆傚湪DOM鍜孲AX涓ゅぇ涓繪祦XML瑙f瀽鍔炴硶涔嬪鎻愪緵浜嗗彟澶栦竴涓彲琛岀殑瑙e喅鏂規銆?/font>
Pull Parser
聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.extreme.indiana.edu/xgws/xsoap/
聽榪欎釜搴撻噰鐢╬ull鏂規硶鐨刾arser銆傚湪姣忎釜SAX鐨刾arser搴曞眰閮芥湁涓涓猵ull鐨刾arser錛岃繖涓獂pp鎶?/font>
榪欏眰鏆撮湶鍑烘潵鐩存帴緇欏ぇ瀹朵嬌鐢ㄣ傚湪瑕佸厖鍒嗚冭檻閫熷害鐨勬椂鍊欏煎緱灝濊瘯銆?/font>
Xalan
聽聽聽聽聽聽聽聽 鍙傝冪綉绔欙細 http://xml.apache.org/xalan-c/
聽聽聽聽聽聽聽聽 Xalan鏄竴涓敤浜庢妸XML鏂囨。杞崲涓篐TML錛岀函鏂囨湰鎴栬呭叾浠朮ML綾誨瀷鏂囨。鐨刋SLT澶勭悊鍣ㄣ?/font>
CMarkup
聽聽聽聽聽聽聽聽 鍙傝冪綉绔欙細 http://www.firstobject.com/xml.htm
聽聽聽聽聽聽聽聽 榪欐槸涓縐嶄嬌鐢‥DOM鐨刋ML瑙f瀽鍣ㄣ傚湪寰堝鎬濊礬涓婇潰闈炲父鐏墊椿瀹炵敤銆傚煎緱澶у鍦―OM鍜孲AX涔嬪瀵?/font>
姹備竴鐐圭伒鎰熴?/font>
libxml++
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔櫬犅?http://libxmlplusplus.sourceforge.net/
libxml++鏄钁楀悕鐨刲ibxml XML瑙f瀽鍣ㄧ殑C++灝佽鐗堟湰
聽
縐戝璁$畻
Blitz++
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.oonumerics.org/blitz/
Blitz++ 鏄竴涓珮鏁堢巼鐨勬暟鍊艱綆楀嚱鏁板簱錛屽畠鐨勮璁$洰鐨勬槸甯屾湜寤虹珛涓濂楁棦鍏峰儚C++ 涓鏍鋒柟渚匡紝鍚屾椂鍙?/font>
姣擣ortran閫熷害鏇村揩鐨勬暟鍊艱綆楃幆澧冦傞氬父錛岀敤C++鎵鍐欏嚭鐨勬暟鍊肩▼搴忥紝姣?Fortran鎱?0%宸﹀彸錛屽洜姝?/font>
Blitz++姝f槸瑕佹敼鎺夎繖涓己鐐廣傛柟娉曟槸鍒╃敤C++鐨則emplate鎶鏈紝紼嬪簭鎵ц鐢氳嚦鍙互姣擣ortran鏇村揩銆?/font>
Blitz++鐩墠浠嶅湪鍙戝睍涓紝瀵逛簬甯歌鐨凷VD錛孎FTs錛孮MRES絳夊父瑙佺殑綰挎т唬鏁版柟娉曞茍涓嶆彁渚涳紝涓嶈繃浣跨敤鑰?/font>
鍙互寰堝鏄撳湴鍒╃敤Blitz++鎵鎻愪緵鐨勫嚱鏁版潵鏋勫緩銆?/font>
POOMA
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.codesourcery.com/pooma/pooma
POOMA鏄竴涓厤璐圭殑楂樻ц兘鐨凜++搴擄紝鐢ㄤ簬澶勭悊騫惰寮忕瀛﹁綆椼侾OOMA鐨勯潰鍚戝璞¤璁℃柟渚夸簡蹇熺殑紼?/font>
搴忓紑鍙戯紝瀵瑰茍琛屾満鍣ㄨ繘琛屼簡浼樺寲浠ヨ揪鍒版渶楂樼殑鏁堢巼錛屾柟渚垮湪宸ヤ笟鍜岀爺絀剁幆澧冧腑浣跨敤銆?/font>
MTL聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細http://www.osl.iu.edu/research/mtl/
Matrix Template Library(MTL)鏄竴涓珮鎬ц兘鐨勬硾鍨嬬粍浠跺簱錛屾彁渚涗簡鍚勭鏍煎紡鐭╅樀鐨勫ぇ閲忕嚎鎬т唬鏁版柟闈?/font>
鐨勫姛鑳姐傚湪鏌愪簺搴旂敤浣跨敤楂樻ц兘緙栬瘧鍣ㄧ殑鎯呭喌涓嬶紝姣斿Intel鐨勭紪璇戝櫒錛屼粠浜х敓鐨勬眹緙栦唬鐮佸彲浠ョ湅鍑哄叾
涓庢墜鍐欏嚑涔庢病鏈変袱鏍風殑鏁堣兘銆?/font>
CGAL聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細www.cgal.org
Computational Geometry Algorithms Library鐨勭洰鐨勬槸鎶婂湪璁$畻鍑犱綍鏂歸潰鐨勫ぇ閮ㄥ垎閲嶈鐨勮В鍐蟲柟妗堝拰
鏂規硶浠++搴撶殑褰㈠紡鎻愪緵緇欏伐涓氬拰瀛︽湳鐣岀殑鐢ㄦ埛銆?/font>
聽
娓告垙寮鍙?/strong>
Audio/Video 3D C++ Programming Library
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.galacticasoftware.com/products/av/
AV3D鏄竴涓法騫沖彴錛岄珮鎬ц兘鐨凜++搴撱備富瑕佺殑鐗規ф槸鎻愪緵3D鍥懼艦錛屽0鏁堟敮鎸侊紙SB,浠ュ強S3M錛夛紝鎺у埗鎺ュ彛
錛堥敭鐩橈紝榧犳爣鍜岄仴鎰燂級錛孹MS銆?/font>
KlayGE
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://home.g365.net/enginedev/
鍥藉唴娓告垙寮鍙戦珮鎵嬭嚜宸辯敤C++寮鍙戠殑娓告垙寮曟搸銆侹layGE鏄竴涓紑鏀炬簮浠g爜銆佽法騫沖彴鐨勬父鎴忓紩鎿庯紝騫朵嬌鐢?/font>
Python浣滆剼鏈璦銆侹layGE鍦↙GPL鍗忚涓嬪彂琛屻傛劅璋㈤練鏁忔晱鍏堢敓涓轟腑鍥芥父鎴忓紑鍙戜簨涓氭墍鍋氬嚭鐨勮礎鐚?/font>
OGRE
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.ogre3d.org
OGRE錛堥潰鍚戝璞$殑鍥懼艦娓叉煋寮曟搸錛夋槸鐢–++寮鍙戠殑錛屼嬌鐢ㄧ伒媧葷殑闈㈠悜瀵硅薄3D寮曟搸銆傚畠鐨勭洰鐨勬槸璁╁紑鍙戣?/font>
鑳芥洿鏂逛究鍜岀洿鎺ュ湴寮鍙戝熀浜?D紜歡璁懼鐨勫簲鐢ㄧ▼搴忔垨娓告垙銆傚紩鎿庝腑鐨勭被搴撳鏇村簳灞傜殑緋葷粺搴擄紙濡傦細
Direct3D鍜孫penGL錛夌殑鍏ㄩ儴浣跨敤緇嗚妭榪涜浜嗘娊璞★紝騫舵彁渚涗簡鍩轟簬鐜板疄涓栫晫瀵硅薄鐨勬帴鍙e拰鍏跺畠綾匯?/font>
聽
綰跨▼
C++ Threads
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://threads.sourceforge.net/
榪欎釜搴撶殑鐩爣鏄粰紼嬪簭鍛樻彁渚涙槗浜庝嬌鐢ㄧ殑綾伙紝榪欎簺綾昏緇ф壙浠ユ彁渚涘湪Linux鐜涓緢闅劇湅鍒扮殑澶ч噺鐨勭嚎
紼嬫柟闈㈢殑鍔熻兘銆?/font>
ZThreads
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://zthread.sourceforge.net/
涓涓厛榪涚殑闈㈠悜瀵硅薄錛岃法騫沖彴鐨凜++綰跨▼鍜屽悓姝ュ簱銆?/font>
搴忓垪鍖?/strong>
s11n
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://s11n.net/
涓涓熀浜嶴TL鐨凜++搴擄紝鐢ㄤ簬搴忓垪鍖朠OD錛孲TL瀹瑰櫒浠ュ強鐢ㄦ埛瀹氫箟鐨勭被鍨嬨?/font>
Simple XML Persistence Library
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://sxp.sourceforge.net/
榪欐槸涓涓妸瀵硅薄搴忓垪鍖栦負XML鐨勮交閲忕駭鐨凜++搴撱?/font>
聽
瀛楃涓?/strong>
C++ Str Library
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://www.utilitycode.com/str/
鎿嶄綔瀛楃涓插拰瀛楃鐨勫簱錛屾敮鎸乄indows鍜屾敮鎸乬cc鐨勫縐嶅鉤鍙般傛彁渚涢珮搴︿紭鍖栫殑浠g爜錛屽茍涓旀敮鎸佸綰跨▼鐜?/font>
澧冨拰Unicode錛屽悓鏃惰繕鏈夋鍒欒〃杈懼紡鐨勬敮鎸併?/font>
Common Text Transformation Library
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://cttl.sourceforge.net/
榪欐槸涓涓В鏋愬拰淇敼STL瀛楃涓茬殑搴撱侰TTL substring綾誨彲浠ョ敤鏉ユ瘮杈冿紝鎻掑叆錛屾浛鎹互鍙婄敤EBNF鐨勮娉?/font>
榪涜瑙f瀽銆?/font>
GRETA
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://research.microsoft.com/projects/greta/
榪欐槸鐢卞井杞爺絀墮櫌鐨勭爺絀朵漢鍛樺紑鍙戠殑澶勭悊姝e垯琛ㄨ揪寮忕殑搴撱傚湪灝忓瀷鍖歸厤鐨勬儏鍐典笅鏈夐潪甯鎬紭縐鐨勮〃鐜般?/font>
緇煎悎
P::Classes
聽聽聽聽聽聽聽聽聽鍙傝冪綉绔欙細 http://pclasses.com/
涓涓珮搴﹀彲縐繪鐨凜++搴旂敤紼嬪簭妗嗘灦銆傚綋鍓嶅叧娉ㄧ被鍨嬪拰綰跨▼瀹夊叏鐨剆ignal/slot鏈哄埗錛宨/o緋葷粺鍖呮嫭鍩轟簬
鎻掍歡鐨勭綉緇滃崗璁忔槑鐨刬/o鏋舵瀯錛屽熀浜庢彃浠剁殑搴旂敤紼嬪簭娑堟伅鏃ュ織妗嗘灦錛岃闂畇ql鏁版嵁搴撶殑綾葷瓑絳夈?/font>
ACDK - Artefaktur Component Development Kit

void outdata(A &s)
{
聽cout<<"out data:"<<s.name<<endl;
}
void main()
{
聽string t="tim";
聽A s1(t);
聽outdata(s1);
}