锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 璧栧媷嫻╋紙http://laiyonghao.com錛?br /> 澹版槑錛氭湰鏂囨簮鑷?Danny Kalev 鍦?2011 騫?6 鏈?21 鏃ュ彂琛ㄧ殑銆奣he Biggest Changes in C++11(and Why You Should Care)銆嬩竴鏂囷紝鍑犱箮鎵鏈夊唴瀹歸兘鎼簡(jiǎn)榪囨潵錛屼絾涓嶆槸鍏ㄦ枃鐓ц瘧錛屾湁鍥版儜涔嬪錛岃鍙傝鍘熸枃錛?a >http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/ 錛夈?br /> 娉細(xì)浣滆?Danny Kalev 鏇炬槸 C++ 鏍囧噯濮斿憳?shù)細(xì)鎴愬憳銆?/p> Lambda 琛ㄨ揪寮忕殑褰㈠紡鏄繖鏍風(fēng)殑錛?br /> 鍦?C++03 涓紝澹版槑瀵硅薄鐨勫悓鏃跺繀欏繪寚鏄庡叾綾誨瀷錛屽叾瀹炲ぇ澶氭暟鎯呭喌涓嬶紝澹版槑瀵硅薄鐨勫悓鏃朵篃浼?xì)鍖呮嫭涓涓垵濮嬪鹼紝C++11 鍦ㄨ繖縐嶆儏鍐典笅灝辮兘澶熻浣犲0鏄庡璞℃椂涓嶅啀鎸囧畾綾誨瀷浜?jiǎn)锛?xì) C++ 鏈灝戞湁 4 縐嶄笉鍚岀殑鍒濆鍖栧艦寮忥紝濡傛嫭鍙峰唴鍒濆鍖栵紝瑙侊細(xì) 鍍忎互涓嬪艦寮忕殑鍑芥暟錛?br /> nullptr 鏄竴涓柊鐨?C++ 鍏抽敭瀛楋紝瀹冩槸絀烘寚閽堝父閲忥紝瀹冩槸鐢ㄦ潵鏇夸唬楂橀闄╃殑 NULL 瀹忓拰 0 瀛楅潰閲忕殑銆俷ullptr 鏄己綾誨瀷鐨勶細(xì) C++11 涓瀯閫犲嚱鏁板彲浠ヨ皟鐢ㄥ悓涓涓被鐨勫彟涓涓瀯閫犲嚱鏁幫細(xì) 鍦?C++03 涓殑寮曠敤綾誨瀷鏄彧緇戝畾宸﹀肩殑錛孋++11 寮曠敤涓涓柊鐨勫紩鐢ㄧ被鍨嬪彨鍙沖煎紩鐢ㄧ被鍨嬶紝瀹冩槸緇戝畾鍒板彸鍊肩殑錛屽涓存椂瀵硅薄鎴栧瓧闈㈤噺銆?br /> 澧炲姞鍙沖煎紩鐢ㄧ殑涓昏鍘熷洜鏄負(fù)浜?jiǎn)瀹炵?move 璇箟銆備笌浼犵粺鐨勬嫹璐濅笉鍚岋紝move 鐨勬剰鎬濇槸鐩爣瀵硅薄“紿冨彇”鍘熷璞$殑璧勬簮錛屽茍灝嗘簮緗簬“絀?#8221;鐘舵併傚綋鎷瘋礉涓涓璞℃椂錛屽叾瀹炰唬浠鋒槀璐典笖鏃犲繀瑕侊紝move 鎿嶄綔灝卞彲浠ユ浛浠e畠銆傚鍦? string 浜ゆ崲鐨勬椂鍊欙紝浣跨敤 move 鎰忎箟灝辨湁宸ㄥぇ鐨勬ц兘鎻愬崌錛屽鍘熸柟妗堟槸榪欐牱鐨勶細(xì) 闄?TR1 鍖呭惈鐨勬柊瀹瑰櫒錛坲nordered_set, unordered_map, unordered_multiset, 鍜寀nordered_multimap錛夛紝榪樻湁涓浜涙柊鐨勫簱錛屽姝e垯琛ㄨ揪寮忥紝tuple錛屽嚱鏁板璞″皝瑁呭櫒絳夈備笅闈粙緇嶄竴浜?C++11 鐨勬爣鍑嗗簱鏂扮壒鎬э細(xì) 浠庣▼搴忓憳鐨勮搴︽潵鐪嬶紝C++11 鏈閲嶈鐨勭壒鎬у氨鏄茍鍙戜簡(jiǎn)銆侰++11 鎻愪緵浜?thread 綾伙紝涔熸彁渚涗簡(jiǎn) promise 鍜?future 鐢ㄤ互騫跺彂鐜涓殑鍚屾錛岀敤 async() 鍑芥暟妯℃澘鎵ц騫跺彂浠誨姟錛屽拰 thread_local 瀛樺偍澹版槑涓虹壒瀹氱嚎紼嬬嫭鍗犵殑鏁版嵁錛岃繖閲岋紙http://www.devx.com/SpecialReports/Article/38883錛夋湁涓涓畝鍗?鐨?C++11 綰跨▼搴撴暀紼嬶紙鑻辨枃錛夈?/p> C++98 瀹氫箟鐨勫敮涓鐨勬櫤鑳芥寚閽堢被 auto_ptr 宸茬粡琚純鐢紝C++11 寮曞叆浜?jiǎn)鏂扮殑鏅鸿兘閽堝绫?shared_ptr 鍜?unique_ptr銆傚畠浠兘鏄爣鍑嗗簱鐨勫叾瀹冪粍浠跺吋瀹癸紝鍙互瀹夊叏鍦版妸鏅鴻兘鎸囬拡瀛樺叆鏍囧噯瀹瑰櫒錛屼篃鍙互瀹夊叏鍦扮敤鏍囧噯綆楁硶“鍊掕吘”瀹冧滑銆?/p> 涓昏鏄?all_of()銆乤ny_of() 鍜?none_of()錛屼笅闈㈡槸渚嬪瓙錛?br />
璇磋搗鏉ュぇ綰︿竴騫村墠鍦ㄧ綉涓婅榪囧埆浜哄啓榪欑帺鎰忥紝褰撴椂娌℃庝箞鐪嬪叾鍐呭錛屽彧鏄劅瑙夋湁闅懼害鐨勩傜劧鑰岀洿鍒拌繎鏈熻嚜宸卞垎鏋愯繖涓滆タ鍚庡彂鐜板叾瀹炴病浠涔堝唴瀹癸紝浜庢槸鑷繁灝辨悶浜?jiǎn)涓?/span>
鏁堟灉鎴浘錛?/span>
鐩墠鍙槸瀹炵幇浜?jiǎn)鍩杭媭閮ㄥ垎錛屾湁絀轟簡(jiǎn)鍦ㄥ線涓婇檮鍔犲唴瀹廣?/span>
鑷充簬浠g爜錛屽叾瀹炶繖涓滆タ鍩烘湰娌′粈涔堝惈閲忥紝鎵浠ヤ篃灝辨病蹇呰闄勪簡(jiǎn)銆?/span>
]]>Lambda 琛ㄨ揪寮?/h2>
鏉ョ湅涓鏁版煇涓瓧絎﹀簭鍒椾腑鏈夊嚑涓ぇ鍐欏瓧姣嶇殑渚嬪瓙錛?br />
鍏朵腑 [&Uppercase] 涓殑 & 鐨勬剰涔夋槸 lambda 鍑芥暟浣撹鑾峰彇涓涓?Uppercase 寮曠敤錛屼互渚胯兘澶熸敼鍙樺畠鐨勫鹼紝濡傛灉娌℃湁 &錛岄偅灝?Uppercase 灝嗕互浼犲肩殑褰㈠紡浼犻掕繃鍘匯?鑷姩綾誨瀷鎺ㄥ鍜?decltype
榪欎釜鐗規(guī)у湪瀵硅薄鐨勭被鍨嬪緢澶у緢闀跨殑鏃跺欏緢鏈夌敤錛屽錛?br />
閭d釜榪唬鍣ㄥ彲浠ュ0鏄庝負(fù)錛?br />
C++11 涔熸彁渚涗簡(jiǎn)浠庡璞℃垨琛ㄨ揪寮忎腑“淇樿幏”綾誨瀷鐨勬満鍒訛紝鏂扮殑鎿嶄綔絎?decltype 鍙互浠庝竴涓〃杈懼紡涓?#8220;淇樿幏”鍏剁粨鏋滅殑綾誨瀷騫?#8220;榪斿洖”錛?br /> 緇熶竴鐨勫垵濮嬪寲璇硶
榪樻湁絳夊彿褰㈠紡鐨勶細(xì)
瀵逛簬 POD 闆嗗悎錛屽張鍙互鐢ㄥぇ鎷彿錛?br />
鏈鍚庤繕鏈夋瀯閫犲嚱鏁扮殑鎴愬憳鍒濆鍖栵細(xì)
榪欎箞澶氬垵濮嬪寲褰㈠紡錛屼笉浠呰彍楦熶細(xì)鎼炲緱寰堝ご澶э紝楂樻墜涔熷悆涓嶆秷銆傛洿鎯ㄧ殑鏄?C++03 涓眳鐒朵笉鑳藉垵濮嬪寲 POD 鏁扮粍鐨勭被鎴愬憳錛屼篃涓嶈兘鍦ㄤ嬌鐢?new[] 鐨勬椂鍊欏垵濮?POD 鏁扮粍錛屾搷铔嬪晩錛丆++11 灝辯敤澶ф嫭鍙蜂竴緇熷ぉ涓嬩簡(jiǎn)錛?br />
榪樻湁涓澶уソ浜嬪氨鏄浜庡鍣ㄦ潵璇達(dá)紝緇堜簬鍙互鎽嗚劚 push_back() 璋冪敤浜?jiǎn)锛孋++11涓彲浠ョ洿瑙傚湴鍒濆鍖栧鍣ㄤ簡(jiǎn)錛?br />
鑰岀被涓殑鏁版嵁鎴愬憳鍒濆鍖栦篃寰楀埌浜?jiǎn)鏀寔锛?xì)
deleted 鍑芥暟鍜?defaulted 鍑芥暟
鍙仛 defaulted 鍑芥暟錛?default; 鎸囩ず緙栬瘧鍣ㄧ敓鎴愯鍑芥暟鐨勯粯璁ゅ疄鐜般傝繖鏈変袱涓ソ澶勶細(xì)涓鏄紼嬪簭鍛樿交鏉句簡(jiǎn)錛屽皯鏁查敭鐩橈紝浜屾槸鏈夋洿濂界殑鎬ц兘銆?br /> 涓?defaulted 鍑芥暟鐩稿鐨勫氨鏄?deleted 鍑芥暟錛?br />
榪欒揣鏈変竴澶х敤閫斿氨鏄疄鐜?noncopyabe 闃叉瀵硅薄鎷瘋礉錛岃鎯崇姝㈡嫹璐濓紝鐢?=deleted 澹版槑涓涓嬩袱涓叧閿殑鎴愬憳鍑芥暟灝卞彲浠ヤ簡(jiǎn)錛?br /> nullptr
鎵鏈夎窡鎸囬拡鏈夊叧鐨勫湴鏂歸兘鍙互鐢?nullptr錛屽寘鎷嚱鏁版寚閽堝拰鎴愬憳鎸囬拡錛?br /> 濮旀墭鏋勯犲嚱鏁?/h2>
#2 灝辨槸鎵璋撶殑濮旀墭鏋勯犲嚱鏁幫紝璋冪敤浜?jiǎn)鐪熸鐨勬瀯閫犲嚱鏁?#1銆?鍙沖煎紩鐢?/h2>
榪欑鏂規(guī)寰堝偦寰堝ぉ鐪燂紝寰堟參錛屽洜涓洪渶瑕佺敵璇峰唴瀛橈紝鐒跺悗鎷瘋礉瀛楃錛岃?move 灝卞彧闇瑕佷氦鎹袱涓暟鎹垚鍛橈紝鏃犻』鐢寵銆侀噴鏀懼唴瀛樺拰鎷瘋礉瀛楃鏁扮粍錛?br />
瑕佸疄鐜版敮鎸?move 鐨勭被錛岄渶瑕佸0鏄?move 鏋勯犲嚱鏁板拰 move 璧嬪兼搷浣滅錛屽涓嬶細(xì)
C++11 鐨勬爣鍑嗗簱騫挎硾浣跨敤 move 璇箟錛屽緢澶氱畻娉曞拰瀹瑰櫒閮藉凡緇忎嬌鐢?move 璇箟浼樺寲榪囦簡(jiǎn)銆?C++11 鐨勬爣鍑嗗簱
綰跨▼搴?/h3>
鏂扮殑鏅鴻兘鎸囬拡綾?/h3>
鏂扮殑綆楁硶
榪樻湁涓涓柊鐨?copy_n錛?br />
iota() 綆楁硶鍙互鐢ㄦ潵鍒涘緩閫掑搴忓垪錛屽畠鍏堟妸鍒濆艱祴鍊肩粰 *first錛岀劧鍚庣敤鍓嶇疆 ++ 鎿嶄綔絎﹀闀垮垵鍊煎茍璧嬪煎埌緇欎笅涓涓凱浠e櫒鎸囧悜鐨勫厓绱狅紝濡備笅錛?br />
鏄殑錛孋++11 浠嶇劧緙哄皯涓浜涘緢鏈夌敤鐨勫簱濡?XML API錛宻ocket錛孏UI銆佸弽灝?#8212;—浠ュ強(qiáng)鑷姩鍨冨溇鏀墮泦銆傜劧鑰岀幇鏈夌壒鎬у凡緇忚 C++ 鏇村畨鍏ㄣ侀珮鏁堬紙鏄殑錛屾晥鐜囨洿楂樹(shù)簡(jiǎn)錛屽彲浠ュ弬瑙?Google 鐨? 鍩哄噯嫻嬭瘯緇撴灉http://www.itproportal.com/2011/06/07/googles-rates-c-most- complex-highest-performing-language/錛変互鍙?qiáng)鏇村姞鏄撲簬瀛︿範(fàn)鍜屼娇鐢ㄣ?br /> 濡傛灉瑙夊緱 C++ 鍙樺寲澶ぇ浜?jiǎn)锛屼笉蹇呮儕鎭愬Q岃姳鐐規(guī)椂闂存潵瀛︿範(fàn)灝卞ソ浜?jiǎn)銆傚彲鑳藉湪浣犺瀺浼?xì)璇忛氭柊鐗規(guī)т互鍚庯紝浣犱細(xì)鍚屾剰 Stroustrup 鐨勮鐐癸細(xì)C++11 鏄竴闂ㄦ柊鐨勮璦——涓涓洿濂界殑 C++銆?p>
]]>
{
Py_Initialize();
PyObject * pModule = NULL;//澹版槑鍙橀噺
PyObject * pFunc = NULL;// 澹版槑鍙橀噺
pModule =PyImport_ImportModule("helloworld");//榪欓噷鏄璋冪敤鐨勬枃浠跺悕
if (!pModule)
cout << "err";
handle<>* _module; // Module handle.
_module = new handle<>(pModule);
// 閫氳繃call_method
int i = call_method<int>(_module->get() , "Hello" , 4);
// 閫氳繃attr
main_module.attr("Hello")(2);
// main_module.attr("Hello")(2); 灞曞紑濡備笅
object main_module(*_module);
object FunObj = main_module.attr("Hello"); // 鑾峰彇hello鍑芥暟瀵硅薄
// 閫氳繃object鐖剁被鐨刼perator()鎿嶄綔絎?/span>
FunObj(1);
// 閫氳繃call
i = call<int>(FunObj.ptr(), 3);
{ // 閬嶅巻涓閬峱ython鍐呯疆綾誨瀷list瀵硅薄涓殑鍊?/span>
list List = call_method<list>(_module->get() , "getList");
int n = len(List);
for (int i = 0 ; i < n ; i++)
{
int val = extract<int> (List[i]); // 鑾峰彇List[i]浜х敓鐨刼bject瀵硅薄涓殑鍊?/span>錛岄氳繃extract妯℃澘鏉ヨ漿鎹?br /> cout << val << " ";
}
}
return 0;
}
]]>
浠ヤ笅鍙槸瀵硅嚜宸辨懜绱㈢粨鏋滅殑鎬葷粨錛屽叾涓毦鍏嶅瓨鍦ㄩ敊璇紝濡傛湁浠諱綍閿欒錛屾湜涓嶆儨鎸囨
綾誨畾涔夛細(xì)
{
private:
int m_val;
string m_nam;
public:
void setVal(int val)
{
m_val = val;
}
int getVal()
{
return m_val;
}
void setName(const char *name)
{
m_nam = name;
}
const char* getName()
{
return m_nam.c_str();
}
void show()
{
std::cout <<"hello world" <<std::endl;
}
};
鏂規(guī)硶涓錛?/strong>
{
Py_Initialize();
PyObject *pModule = PyImport_ImportModule("helloworld");
handle<>_module(pModule);
object main_module(_module);
// 瀵煎嚭C++綾誨埌python涓?/span>
main_module.attr("Demo") = class_ <Demo>("Demo") // 閫氳繃boost::python涓殑class_灝咰++綾誨寘瑁呮垚object綾誨瀷錛屽洜涓簆ython涓墍鏈夌被鍨嬮兘鏄痮bject
.def("setVal", &Demo::setVal)
.def("setName", &Demo::setName)
;
// 閫氳繃boost::python鎻愪緵鐨勬ā鏉垮嚱鏁皃tr錛屾潵灝咲emo瀵硅薄浼犲叆python
Demo a;
main_module.attr("test") = object(ptr(&a));
std::cout <<"涔嬪墠:"<< a.getName() << " " << a.getVal()<<endl;
call_method<void>(pModule , "fun2");
std::cout <<"涔嬪悗:"<< a.getName() << " " << a.getVal()<<endl;
Demo tmp = call_method<Demo>(pModule , "ReturnCppClass");
std::cout << tmp.getName() << " " << tmp.getVal() <<endl;
helloworld.py鑴氭湰鍐呭錛?br />
tmp = test;
tmp.setVal(12345);
tmp.setName("2011-5-19");
tmp = Demo();
tmp.setName('123456789')
tmp.setVal(99);
return tmp;
鏂規(guī)硶浜岋細(xì)
閫氳繃鏅鴻兘鎸囬拡瀹炵幇C++瀵硅薄鐨勫鍏?strong>
void fun2()
{
Py_Initialize();
Demo_ptr spD1(new Demo);
spD1->setName("NULL");
spD1->setVal(0);
try
{
PyObject *pModule = PyImport_ImportModule("helloworld");
register_ptr_to_python <Demo_ptr>(); // 娉ㄥ唽鍙兘鎸囬拡
handle<>* _module;
_module = new handle<>(pModule);
object main_module(*_module);
object dictionary = main_module.attr("__dict__");
dictionary["Demo"] = class_ <Demo>("Demo")
.def("setVal", &Demo::setVal)
.def("setName", &Demo::setName)
;
main_module.attr("DemoObj") = spD1; // 娣誨姞鏅鴻兘鎸囬拡鍒拌剼鏈紝騫墮噸鍛藉悕
call_method<void>(pModule , "SetObj"); // 鍦ㄨ剼鏈腑閫氳繃鎿嶇旱鏅鴻兘鎸囬拡鏉ユ帶鍒跺璞?/span>
std::cout << a.getName() << " " << a.getVal()<<endl;
}
catch (error_already_set)
{
PyErr_Print();
}
std::cout << "spD1->getName(): " << spD1->getName() <<std::endl;
std::cout << "spD1->getVal(): " << spD1->getVal() <<std::endl;
}
鑴氭湰鍐呭錛?br />
DemoObj.setVal(100);
DemoObj.setName('hello');
1.register_ptr_to_python <Demo_ptr>(); 娌℃湁榪欏彞榪愯鏃朵細(xì)寰楀埌閿欒銆傚叧浜巖egister_ptr_to_python錛宐oost涓殑瑙i噴鏄細(xì)
“a function template which registers a conversion for smart pointers to Python”
2.
.def("setVal", &Demo::setVal)
.def("setName", &Demo::setName)
;
.def("setVal", &Demo::setVal)
.def("setName", &Demo::setName)
;
-----------------------------------------------------------------------------------
浠ヤ笂灝辨槸鍏充簬濡備綍灝咰++瀵硅薄浼犲叆python鐨勪竴鐐逛範(fàn)寰楋紝濡傛湁浠諱綍閿欒錛屾湜涓嶆儨鎸囨
-----------------------------------------------------------------------------------
P.S.: cppblog鎻愪緵鐨勭紪杈戝櫒涓嶅ソ鐢?img src ="http://www.shnenglu.com/zhaoyg/aggbug/147885.html" width = "1" height = "1" />
]]>
浜庢槸閫氳繃鍏抽敭瀛?#8220;C++宓屽叆python 鍙戝竷”錛屾壘鍒頒簡(jiǎn)涓涓敤py2exe鏉ヨВ鍐抽棶棰橈紝浣嗘垜璇曚簡(jiǎn)鍗婂ぉ閮芥病鎴愬姛錛堜篃璁告槸鎴戣嚜宸辨病寮勫鐨勫師鍥狅紝鍥犱負(fù)浜哄閮芥垚鍔熶簡(jiǎn)錛夈?br />鍐嶅悗鏉ユ垜鎶婂叧閿瓧鏀逛負(fù)浜?#8220;python C++ distribute embed”錛堝嵆鑻辨枃鍏抽敭瀛楋級(jí)錛岃繖涓嬫嫧浜戣澶╀簡(jiǎn)錛屽洜涓哄湪Google鐨勭涓欏靛氨鏈変竴涓鍥藉笘瀛愬叾鏍囬姝e拰鎴戞剰錛堟灉鐒惰嫳璇粰鍔涳級(jí)銆?br />
鐪嬩簡(jiǎn)閭d釜璐村瓙鍙戠幇錛屼箣鎵浠ヤ笉鑳藉湪娌℃湁瀹夎python鐨勬満瀛愪笂榪愯鏄洜涓猴細(xì)
“
In addition to pythonxy.dll, you also need the entire Python library, i.e. the contents of the lib folder, plus the extension modules, i.e. the contents of the DLLs folder. Without the standard library, Python won't even start, since it tries to find os.py (in 3.x; string.py in 2.x). On startup, it imports a number of modules, in particular site.py.
”
鍘熸枃錛?a >http://stackoverflow.com/questions/1387906/c-with-python-embedding-crash-if-python-not-installed
]]>
璇曚簡(jiǎn)涓嬬綉涓婄殑涓浜沀鐩樹(shù)慨澶嶅伐鍏鳳紝浣嗗潎鍛婂け璐ャ傚績(jī)鎯寵繖涓嬫姤搴熶簡(jiǎn)錛屽張寰椾拱浜?jiǎn)銆?br>
涓嶈繃浠婂ぉ鎶辯潃渚ュ垢蹇?jī)鐞嗗張鍦ň|戜笂鎼滀簡(jiǎn)鎼滐紝鍙戠幇鏈変竴縐嶇О涓?#8220;閲忎駭宸ュ叿”鐨勬垜榪樻病璇曪紝鍚庢潵緇撴灉璇佹槑閲忎駭宸ュ叿鏋滅劧濂忔晥錛屾垜鐨勭洏鍙堟椿浜?img border=0 src="http://www.shnenglu.com/Emoticons/QQ/06.gif" width=20 height=20>銆?br>
浠ヤ笅涓?鏁欑▼ & 宸ュ叿
鏁欑▼閾炬帴錛?a >http://bbs.deepin.org/viewthread.php?tid=1772579