锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品国产精品亚洲下载,狠狠色婷婷久久一区二区,婷婷五月深深久久精品http://www.shnenglu.com/tianbianlan/category/20512.htmlzh-cnSun, 05 May 2013 13:30:41 GMTSun, 05 May 2013 13:30:41 GMT60[杞琞The Biggest Changes in C++11 http://www.shnenglu.com/tianbianlan/archive/2013/05/05/199992.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Sun, 05 May 2013 13:26:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2013/05/05/199992.htmlhttp://www.shnenglu.com/tianbianlan/comments/199992.htmlhttp://www.shnenglu.com/tianbianlan/archive/2013/05/05/199992.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/199992.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/199992.html

婧愭枃绔犳潵鑷墠C++鏍囧噯濮斿憳浼?xì)鐨?nbsp;Danny Kalev 鐨?nbsp;The Biggest Changes in C++11 (and Why You Should Care)錛岃禆鍕囨旦鍋氫簡(jiǎn)涓涓?a target="_blank">涓枃緲昏瘧鍦ㄨ繖閲?/a>銆傛墍浠ワ紝鎴戝氨涓嶇炕璇戜簡(jiǎn)錛屾垜鍦ㄨ繖閲屼粎瀵規(guī)枃涓彁鍒扮殑榪欎簺鍙樺寲“榪介棶涓轟粈涔堣寮曞叆榪欎簺鍙樺寲”鐨勪竴涓帰璁紝鍙湁鐭ラ亾涓轟簡(jiǎn)浠涔堬紝鐢ㄥ湪浠涔堝湴鏂癸紝鎴戜滑鎵嶈兘鐪熸瀛﹀埌榪欎釜鐭ヨ瘑銆傝屼互姝や綘鍙互鏇存繁鍏ュ湴浜?jiǎn)瑙q欎簺鍙樺寲銆傛墍浠ワ紝鏈枃涓嶆槸緲昏瘧銆傚洜涓哄啓寰楁湁浜涗粨淇?jī)锛屾墍浠ラ毦鍏嶆湁闂錛岃繕璇峰ぇ瀹舵寚姝c?/p>

Lambda 琛ㄨ揪寮?/h4>

Lambda琛ㄨ揪寮忔潵婧愪簬鍑芥暟寮忕紪紼嬶紝璇寸櫧灝變簡(jiǎn)灝辨槸鍦ㄤ嬌鐢ㄧ殑鍦版柟瀹氫箟鍑芥暟錛屾湁鐨勮璦鍙?#8220;闂寘”錛屽鏋?lambda 鍑芥暟娌℃湁浼犲洖鍊?渚嬪 void )錛屽叾鍥炶繑綾誨瀷鍙瀹屽叏蹇界暐銆?瀹氫箟鍦ㄤ笌 lambda 鍑芥暟鐩稿悓浣滅敤鍩熺殑鍙橀噺鍙傝冧篃鍙互琚嬌鐢ㄣ傝繖縐嶇殑鍙橀噺闆嗗悎涓鑸縐頒綔 closure錛堥棴鍖咃級(jí)銆傛垜鍦ㄨ繖閲屽氨涓嶅啀璁茶繖涓簨浜?jiǎn)銆傝〃杈懼紡鐨勭畝鍗曡娉曞涓嬶紝

1
[capture](parameters)->return_type {body}

鍘熸枃鐨勪綔鑰呯粰鍑轟簡(jiǎn)涓嬮潰鐨勪緥瀛愶細(xì)

1
2
3
4
5
6
7
8
9
10
int main()
{
   char s[]="Hello World!";
   int Uppercase = 0; //modified by the lambda
   for_each(s, s+sizeof(s), [&Uppercase] (char c) {
    if (isupper(c))
     Uppercase++;
    });
 cout << Uppercase << " uppercase letters in: " << s <<endl;
}

鍦ㄤ紶緇熺殑STL涓璮or_each() 榪欎釜鐜╂剰鏈鍚庨偅涓弬鏁伴渶瑕佷竴涓?#8220;鍑芥暟瀵硅薄”錛屾墍璋撳嚱鏁板璞★紝鍏跺疄鏄竴涓猚lass錛岃繖涓猚lass閲嶈澆浜?jiǎn)operator()錛屼簬鏄繖涓璞″彲浠ュ儚鍑芥暟鐨勫紡鏍風(fēng)殑浣跨敤銆傚疄鐜頒竴涓嚱鏁板璞″茍涓嶅鏄擄紝闇瑕佷嬌鐢╰emplate錛屾瘮濡備笅闈㈣繖涓緥瀛愬氨鏄嚱鏁板璞$殑綆鍗曚緥瀛愶紙瀹為檯鐨勫疄鐜拌繙姣旇繖涓鏉傦級(jí)錛?/p>

1
2
3
4
5
6
7
8
9
template <class T>
class less
{
public:
    bool operator()(const T&l, const T&r)const
    {
        return l < r;
    }
};

鎵浠ワ紝C++寮曞叆Lambda鐨勬渶涓昏鍘熷洜灝辨槸1錛夊彲浠ュ畾涔夊尶鍚嶅嚱鏁幫紝2錛夌紪璇戝櫒浼?xì)鎶婂叾铦{鎴愬嚱鏁板璞?/strong>銆傜浉淇′綘浼?xì)鍜屾垜涓鏍鳳紝浼?xì)鐤戦棶湄?fù)浠涔堜互鍓峉TL涓殑ptr_fun()榪欎釜鍑芥暟瀵硅薄涓嶈兘鐢紵錛坧tr_fun()灝辨槸鎶婁竴涓嚜鐒跺嚱鏁拌漿鎴愬嚱鏁板璞$殑錛夈傚師鍥犳槸錛宲tr_fun() 鐨勫眬闄愭槸鍏舵帴鏀剁殑鑷劧鍑芥暟鍙兘鏈?鎴?涓弬鏁般?/p>

閭d箞錛岄櫎浜?jiǎn)鏂逛究澶栧Q屼負(fù)浠涔堜竴瀹氳浣跨敤Lambda鍛紵瀹冩瘮浼犵粺鐨勫嚱鏁版垨鏄嚱鏁板璞℃湁浠涔堝ソ澶勫憿錛熸垜涓漢鎵鐞嗚В鐨勬槸錛岃繖縐嶅嚱鏁頒箣騫翠互鍙?#8220;闂寘”錛屽氨鏄洜涓哄叾闄愬埗浜?jiǎn)鍒汉鐨勮畨K棶錛屾洿縐佹湁銆備篃鍙互璁や負(fù)浠栨槸涓嬈℃х殑鏂規(guī)硶銆侺ambda琛ㄨ揪寮忓簲璇ユ槸綆媧佺殑錛屾瀬縐佹湁鐨勶紝涓轟簡(jiǎn)鏇存槗鐨勪唬鐮佸拰鏇存柟渚跨殑緙栫▼銆?/p>

鑷姩綾誨瀷鎺ㄥ auto

鍦ㄨ繖涓鑺備腑錛屽師鏂囦富瑕佷粙緇嶄簡(jiǎn)涓や釜鍏抽敭瀛?auto 鍜?deltype錛岀ず渚嬪涓嬶細(xì)

1
2
3
4
auto x=0; //x has type int because 0 is int
auto c='a'; //char
auto d=0.5; //double
auto national_debt=14400000000000LL;//long long

auto 鏈澶х殑濂藉灝辨槸璁╀唬鐮佺畝媧侊紝灝ゅ叾鏄偅浜涙ā鏉跨被鐨勫0鏄庯紝姣斿錛歋TL涓殑瀹瑰櫒鐨勮凱浠e瓙綾誨瀷銆?/p>

1
vector<int>::const_iterator ci = vi.begin();

鍙互鍙樻垚錛?/p>

1
auto ci = vi.begin();

妯℃澘榪欎釜鐗規(guī)цC++鐨勪唬鐮佸彉寰楀緢闅捐錛屼笉淇′綘鍙互鐪嬬湅STL鐨勬簮鐮侊紝閭f槸涓涓貢鍟娿備嬌鐢╝uto蹇呴渶涓涓垵濮嬪寲鍊鹼紝緙栬瘧鍣ㄥ彲浠ラ氳繃榪欎釜鍒濆鍖栧兼帹瀵煎嚭綾誨瀷銆傚洜涓篴uto鏄潵綆鍖栨ā鏉跨被寮曞叆鐨勪唬鐮侀毦璇葷殑闂錛屽涓婇潰鐨勭ず渚嬶紝iteration榪欑綾誨瀷灝辨渶閫傚悎鐢╝uto鐨勶紝浣嗘槸錛屾垜浠笉搴旇鎶婂叾婊ョ敤銆?/p>

姣斿涓嬮潰鐨勪唬鐮佺殑鍙鎬у氨闄嶄綆浜?jiǎn)銆傚洜涓猴紝鎴戜笉鐭ラ亾P(yáng)rocessData榪斿洖浠涔堬紵int? bool? 榪樻槸瀵硅薄錛熸垨鏄埆鐨勪粈涔堬紵榪欒浣犲悗闈㈢殑紼嬪簭涓嶇煡閬撴庝箞鍋氥?/p>

1
auto obj = ProcessData(someVariables);

浣嗘槸涓嬮潰鐨勭▼搴忓氨娌℃湁闂錛屽洜涓簆Object鐨勫瀷鍒湪鍚庨潰鐨刵ew涓湁浜?jiǎn)銆?/p>

1
auto pObject = new SomeType<OtherType>::SomeOtherType();

鑷姩鍖栨帹瀵?decltype

鍏充簬 decltype 鏄竴涓搷浣滅錛屽叾鍙互璇勪及鎷彿鍐呰〃杈懼紡鐨勭被鍨嬶紝鍏惰鍒欏涓嬶細(xì)

  1. 濡傛灉琛ㄨ揪寮廵鏄竴涓彉閲忥紝閭d箞灝辨槸榪欎釜鍙橀噺鐨勭被鍨嬨?/li>
  2. 濡傛灉琛ㄨ揪寮廵鏄竴涓嚱鏁幫紝閭d箞灝辨槸榪欎釜鍑芥暟榪斿洖鍊肩殑綾誨瀷銆?/li>
  3. 濡傛灉涓嶇鍚?鍜?錛屽鏋渆鏄乏鍊鹼紝綾誨瀷涓篢錛岄偅涔坉ecltype(e)鏄疶&錛涘鏋滄槸鍙沖鹼紝鍒欐槸T銆?/li>

鍘熸枃緇欏嚭鐨勭ず渚嬪涓嬶紝鎴戜滑鍙互鐪嬪埌錛岃繖涓鐨勭‘鎴戜滑鐨勫畾涔夊彉閲忕渷浜?jiǎn)寰堝浜嬨?/p>

1
2
3
const vector<int> vi;
typedef decltype (vi.begin()) CIT;
CIT another_const_iterator;

榪樻湁涓涓傚悎鐨勭敤娉曟槸鐢ㄦ潵typedef鍑芥暟鎸囬拡錛屼篃浼?xì)鐪佸緢澶氫簨銆傛瘮濡傦細(xì)

1
2
3
decltype(&myfunc) pfunc = 0;
 
typedef decltype(&A::func1) type;

auto 鍜?decltype 鐨勫樊鍒拰鍏崇郴

Wikipedia 涓婃槸榪欎箞璇寸殑錛堝叧浜巇ecltype鐨勮鍒欒涓婏級(jí)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vector>
 
int main()
{
    const std::vector<int> v(1);
    auto a = v[0];        // a 鐨勭被鍨嬫槸 int
    decltype(v[0]) b = 1; // b 鐨勭被鍨嬫槸 const int&, 鍥犱負(fù)鍑芥暟鐨勮繑鍥炵被鍨嬫槸
                          // std::vector<int>::operator[](size_type) const
    auto c = 0;           // c 鐨勭被鍨嬫槸 int
    auto d = c;           // d 鐨勭被鍨嬫槸 int
    decltype(c) e;        // e 鐨勭被鍨嬫槸 int, 鍥犱負(fù) c 鐨勭被鍨嬫槸int
    decltype((c)) f = c;  // f 鐨勭被鍨嬫槸 int&, 鍥犱負(fù) (c) 鏄乏鍊?/code>
    decltype(0) g;        // g 鐨勭被鍨嬫槸 int, 鍥犱負(fù) 0 鏄彸鍊?/code>
}

濡傛灉auto 鍜?decltype 鍦ㄤ竴璧蜂嬌鐢ㄤ細(xì)鏄粈涔堟牱瀛愶紵鑳界湅涓嬮潰鐨勭ず渚嬶紝涓嬮潰榪欎釜紺轟緥涔熸槸寮曞叆decltype鐨勪竴涓師鍥?#8212;—璁〤++鏈夎兘鍔涘啓涓涓?“ forwarding function 妯℃澘”錛?/p>

1
2
3
template< typename LHS, typename RHS>
  auto AddingFunc(const LHS &lhs, const RHS &rhs) -> decltype(lhs+rhs)
{return lhs + rhs;}

榪欎釜鍑芥暟妯℃澘鐪嬭搗鏉ョ浉褰撹垂瑙o紝鍏剁敤鍒頒簡(jiǎn)auto 鍜?decltype 鏉ユ墿灞曚簡(jiǎn)宸叉湁鐨勬ā鏉挎妧鏈殑涓嶈凍銆傛庝箞涓笉瓚沖憿錛熷湪涓婁緥涓紝鎴戜笉鐭ラ亾AddingFunc浼?xì)鎺ユ敹浠涔堟牱綾誨瀷鐨勫璞★紝榪欎袱涓璞$殑 + 鎿嶄綔絎﹁繑鍥炵殑綾誨瀷涔熶笉鐭ラ亾錛岃佺殑妯℃澘鍑芥暟鏃犳硶瀹氫箟AddingFunc榪斿洖鍊煎拰榪欎袱涓璞$浉鍔犲悗鐨勮繑鍥炲煎尮閰嶏紝鎵浠ワ紝浣犲彲浠ヤ嬌鐢ㄤ笂榪扮殑榪欑瀹氫箟銆?/p>

緇熶竴鐨勫垵濮嬪寲璇硶

C/C++鐨勫垵濮嬪寲鐨勬柟娉曟瘮杈冿紝C++ 11 鐢ㄥぇ鎷彿緇熶竴浜?jiǎn)杩欎簺鍒濆鍖栫殑鏂规硶銆?/p>

姣斿錛歅OD鐨勭被鍨嬨?/p>

1
2
int arr[4]={0,1,2,3};
struct tm today={0};

鍏充簬POD鐩歌涓ゅ彞錛屾墍璋揚(yáng)OD灝辨槸Plain Old Data錛屽綋class/struct鏄?em>鏋佺畝鐨?trivial)銆佸睘浜?em>鏍囧噯甯冨眬(standard-layout)錛屼互鍙?qiáng)浠栫殑鎵鏈夐潪闈?rùn)鎬侊紙non-static錛夋垚鍛橀兘鏄疨OD鏃訛紝浼?xì)琚湄?fù)POD銆傚錛?/p>

1
2
3
struct A { int m; }; // POD
struct B { ~B(); int m; }; // non-POD, compiler generated default ctor
struct C { C() : m() {}; ~C(); int m; }; // non-POD, default-initialising m

POD鐨勫垵濮嬪寲鏈夌偣鎬紝姣斿涓婁緥錛宯ew A; 鍜宯ew A(); 鏄笉涓鏍風(fēng)殑錛屽浜庡叾鍐呴儴鐨刴錛屽墠鑰呮病鏈夎鍒濆鍖栵紝鍚庤呰鍒濆鍖栦簡(jiǎn)錛堜笉鍚?鐨勭紪璇戝櫒琛屼負(fù)涓嶄竴鏍鳳紝VC++鍜孏CC涓嶄竴鏍鳳級(jí)銆傝岄潪POD鐨勫垵濮嬪寲錛屽垯閮戒細(xì)琚垵濮嬪寲銆?/p>

浠庤繖鐐瑰彲浠ョ湅鍑猴紝C/C++鐨勫垵濮嬪寲闂寰堝鎬紝鎵浠ワ紝鍦–++ 2011鐗堜腑灝卞仛浜?jiǎn)缁熶竴銆傚師鏂囦綔鑰呯粰鍑轟簡(jiǎn)濡備笅鐨勭ず渚嬶細(xì)

1
2
3
4
5
6
7
8
9
C c {0,0}; //C++11 only. 鐩稿綋浜? C c(0,0);
 
int* a = new int[3] { 1, 2, 0 }; /C++11 only
 
class X {
    int a[4];
    public:
        X() : a{1,2,3,4} {} //C++11, member array initializer
};

瀹瑰櫒鐨勫垵濮嬪寲錛?/p>

1
2
3
4
5
// C++11 container initializer
vector<string> vs={ "first", "second", "third"};
map singers =
{ {"Lady Gaga", "+1 (212) 555-7890"},
{"Beyonce Knowles", "+1 (212) 555-0987"}};

榪樻敮鎸佸儚Java涓鏍風(fēng)殑鎴愬憳鍒濆鍖栵細(xì)

1
2
3
4
5
6
class C
{
   int a=7; //C++11 only
 public:
   C();
};

Delete 鍜?Default 鍑芥暟

鎴戜滑鐭ラ亾C++鐨勭紪璇戝櫒鍦ㄤ綘娌℃湁瀹氫箟鏌愪簺鎴愬憳鍑芥暟鐨勬椂鍊欎細(xì)緇欎綘鐨勭被鑷姩鐢熸垚榪欎簺鍑芥暟錛屾瘮濡傦紝鏋勯犲嚱鏁幫紝鎷瘋礉鏋勯狅紝鏋愭瀯鍑芥暟錛岃祴鍊煎嚱鏁般傛湁浜涙椂鍊欙紝鎴戜滑涓嶆兂瑕佽繖浜涘嚱鏁幫紝姣斿錛屾瀯閫犲嚱鏁幫紝鍥犱負(fù)鎴戜滑鎯沖仛瀹炵幇鍗曚緥妯″紡銆備紶緇熺殑鍋氭硶鏄皢鍏跺0鏄庢垚private綾誨瀷銆?/p>

鍦ㄦ柊鐨凜++涓紩鍏ヤ簡(jiǎn)涓や釜鎸囩ず絎︼紝delete鎰忎負(fù)鍛婅瘔緙栬瘧鍣ㄤ笉鑷姩浜х敓榪欎釜鍑芥暟錛宒efault鍛婅瘔緙栬瘧鍣ㄤ駭鐢熶竴涓粯璁ょ殑銆傚師鏂囩粰鍑轟簡(jiǎn)涓嬮潰涓や釜渚嬪瓙錛?/p>

1
2
3
4
5
struct A
{
    A()=default; //C++11
    virtual ~A()=default; //C++11
};

鍐嶅delete

1
2
3
4
5
6
7
struct NoCopy
{
    NoCopy & operator =( const NoCopy & ) = delete;
    NoCopy ( const NoCopy & ) = delete;
};
NoCopy a;
NoCopy b(a); //compilation error, copy ctor is deleted

榪欓噷錛屾垜鎯寵涓涓嬶紝涓轟粈涔堟垜浠渶瑕乨efault錛熸垜浠涔堥兘涓嶅啓涓嶅氨鏄痙efault鍚楋紵涓嶅叏鐒舵槸錛屾瘮濡傛瀯閫犲嚱鏁幫紝鍥犱負(fù)鍙浣犲畾涔変簡(jiǎn)涓涓瀯閫犲嚱鏁幫紝緙栬瘧鍣ㄥ氨涓嶄細(xì)緇欎綘鐢熸垚涓涓粯璁ょ殑浜?jiǎn)銆傛墍浠ワ紝涓轟簡(jiǎn)瑕佽榛樿鐨勫拰鑷畾涔夌殑鍏卞瓨錛屾墠寮曞叆榪欎釜鍙傛暟錛屽涓嬩緥鎵紺猴細(xì)

1
2
3
4
5
struct SomeType
{
 SomeType() = default; // 浣跨敤緙栬瘧鍣ㄧ敓鎴愮殑榛樿鏋勯犲嚱鏁?/code>
 SomeType(OtherType value);
};

鍏充簬delete榪樻湁涓や釜鏈夌敤鐨勫湴鏂規(guī)槸

1錛夎浣犵殑瀵硅薄鍙兘鐢熸垚鍦ㄦ爤鍐呭瓨涓婏細(xì)

1
2
3
struct NonNewable {
    void *operator new(std::size_t) = delete;
};

2錛夐樆姝㈠嚱鏁扮殑鍏跺艦鍙傜殑綾誨瀷璋冪敤錛氾紙鑻ュ皾璇曚互 double 鐨勫艦鍙傝皟鐢?nbsp;f()錛屽皢浼?xì)寮曞彂缂栬瘧鏈熼敊璇Q?緙栬瘧鍣ㄤ笉浼?xì)鑷姩灏?double 褰㈠弬杞瀷涓?int 鍐嶈皟鐢?code>f()錛屽鏋滀紶鍏ョ殑鍙傛暟鏄痙ouble錛屽垯浼?xì)鍑虹幇缂栬瘧閿欒锛?jí)

1
2
void f(int i);
 void f(double) = delete;

nullptr

C/C++鐨凬ULL瀹忔槸涓鏈夊緢澶氭綔鍦˙UG鐨勫畯銆傚洜涓烘湁鐨勫簱鎶婂叾瀹氫箟鎴愭暣鏁?錛屾湁鐨勫畾涔夋垚 (void*)0銆傚湪C鐨勬椂浠h繕濂姐備絾鏄湪C++鐨勬椂浠o紝榪欏氨浼?xì)寮曞彂寰堝闂銆備綘鍙互涓婄綉鐪嬬湅銆傝繖鏄負(fù)浠涔堥渶瑕?nbsp;nullptr 鐨勫師鍥犮?nbsp;nullptr 鏄己綾誨瀷鐨勩?/p>

1
2
3
4
5
6
void f(int); //#1
void f(char *);//#2
//C++03
f(0); //浜屼箟鎬?/code>
//C++11
f(nullptr) //鏃犱簩涔夋э紝璋冪敤f(char*)

鎵浠ュ湪鏂扮増涓浠?nullptr 鍒濆鍖栨寚閽堛?/p>

濮旀墭鏋勯?/h4>

鍦ㄤ互鍓嶇殑C++涓紝鏋勯犲嚱鏁頒箣闂翠笉鑳戒簰鐩歌皟鐢紝鎵浠ワ紝鎴戜滑鍦ㄥ啓榪欎簺鐩鎬技鐨勬瀯閫犲嚱鏁伴噷錛屾垜浠細(xì)鎶婄浉鍚岀殑浠g爜鏀懼埌涓涓鏈夌殑鎴愬憳鍑芥暟涓?/p>

1
2
3
4
5
6
7
8
9
10
class SomeType {
private:
  int number;
  string name;
  SomeType( int i, string&amp; s ) : number(i), name(s){}
public:
  SomeType( )               : SomeType( 0, "invalid" ){}
  SomeType( int i )         : SomeType( i, "guest" ){}
  SomeType( string&amp; s ) : SomeType( 1, s ){ PostInit(); }
};

浣嗘槸錛屼負(fù)浜?jiǎn)鏂逛究迤堜笉鑳鲨?#8220;濮旀墭鏋勯?#8221;榪欎釜浜嬪嚭鐜幫紝鏈涓昏鐨勯棶棰樻槸錛屽熀綾葷殑鏋勯犱笉鑳界洿鎺ユ垚涓烘淳鐢熺被鐨勬瀯閫狅紝灝辯畻鏄熀綾葷殑鏋勯犲嚱鏁板浜?jiǎn)锛寢z劇敓綾昏繕瑕佽嚜宸卞啓鑷繁鐨勬瀯閫犲嚱鏁幫細(xì)

1
2
3
4
5
6
7
8
9
10
11
class BaseClass
{
public:
  BaseClass(int iValue);
};
 
class DerivedClass : public BaseClass
{
public:
  using BaseClass::BaseClass;
};

涓婁緥涓紝媧劇敓綾繪墜鍔ㄧ戶鎵垮熀綾葷殑鏋勯犲嚱鏁幫紝 緙栬瘧鍣ㄥ彲浠ヤ嬌鐢ㄥ熀綾葷殑鏋勯犲嚱鏁板畬鎴愭淳鐢熺被鐨勬瀯閫犮?鑰屽皢鍩虹被鐨勬瀯閫犲嚱鏁板甫鍏ユ淳鐢熺被鐨勫姩浣?鏃犳硶閫夋嫨鎬у湴閮ㄥ垎甯﹀叆錛?鎵浠ワ紝瑕佷笉灝辨槸緇ф壙鍩虹被鍏ㄩ儴鐨勬瀯閫犲嚱鏁幫紝瑕佷笉灝辨槸涓涓兘涓嶇戶鎵?涓嶆墜鍔ㄥ甫鍏?銆?姝ゅ錛岃嫢鐗墊秹鍒板閲嶇戶鎵匡紝浠庡涓熀綾葷戶鎵胯屾潵鐨勬瀯閫犲嚱鏁頒笉鍙互鏈夌浉鍚岀殑鍑芥暟絳懼悕(signature)銆?鑰屾淳鐢熺被鐨勬柊鍔犲叆鐨勬瀯閫犲嚱鏁頒篃涓嶅彲浠ュ拰緇ф壙鑰屾潵鐨勫熀綾繪瀯閫犲嚱鏁版湁鐩稿悓鐨勫嚱鏁扮鍚嶏紝鍥犱負(fù)榪欑浉褰撲簬閲嶅澹版槑銆傦紙鎵璋撳嚱鏁扮鍚嶅氨鏄嚱鏁扮殑鍙傛暟綾誨瀷鍜岄『搴忎笉錛?/p>

鍙沖煎紩鐢ㄥ拰move璇箟

鍦ㄨ佺増鐨凜++涓紝涓存椂鎬у彉閲忥紙縐頒負(fù)鍙沖?#8221;R-values”錛屼綅浜庤祴鍊兼搷浣滅涔嬪彸錛夌粡甯哥敤浣滀氦鎹袱涓彉閲忋傛瘮濡備笅闈㈢殑紺轟緥涓殑tmp鍙橀噺銆傜ず渚嬩腑鐨勯偅涓嚱鏁伴渶瑕佷紶閫掍袱涓猻tring鐨勫紩鐢紝浣嗘槸鍦ㄤ氦鎹㈢殑榪囩▼涓駭鐢熶簡(jiǎn)瀵硅薄鐨勬瀯閫狅紝鍐呭瓨鐨勫垎閰嶈繕鏈夊璞$殑鎷瘋礉鏋勯犵瓑絳夊姩浣滐紝鎴愭湰姣旇緝楂樸?/p>

1
2
3
4
5
6
void naiveswap(string &amp;a, string &amp;b)
{
 string temp = a;
 a=b;
 b=temp;
}

C++ 11澧炲姞涓涓柊鐨勫紩鐢紙reference錛夌被鍨嬬О浣滃彸鍊煎紩鐢紙R-value reference錛夛紝鏍囪涓?tt>typename &&銆備粬浠兘澶熶互non-const鍊肩殑鏂瑰紡浼犲叆錛屽厑璁稿璞″幓鏀瑰姩浠栦滑銆傝繖欏逛慨姝e厑璁哥壒瀹氬璞″垱閫犲嚭move璇箟銆?/p>

涓句緥鑰岃█錛屼笂闈㈤偅涓緥瀛愪腑錛宻tring綾諱腑淇濆瓨浜?jiǎn)涓涓姩鎬佸唴瀛樺垎瀛樼殑char*鎸囬拡錛屽鏋滀竴涓猻tring瀵硅薄鍙戠敓鎷瘋礉鏋勯狅紙濡傦細(xì)鍑芥暟榪斿洖錛夛紝string綾婚噷鐨刢har*鍐呭瓨鍙兘閫氳繃鍒涘緩涓涓柊鐨勪復(fù)鏃跺璞★紝騫舵妸鍑芥暟鍐呯殑瀵硅薄鐨勫唴瀛榗opy鍒拌繖涓柊鐨勫璞′腑錛岀劧鍚庨攢姣佷復(fù)鏃跺璞″強(qiáng)鍏跺唴瀛樸?strong>榪欐槸鍘熸潵C++鎬ц兘涓婇噸鐐硅鎵硅瘎鐨勪簨銆?/p>

鑳借繃鍙沖煎紩鐢紝string鐨勬瀯閫犲嚱鏁伴渶瑕佹敼鎴?#8220;move鏋勯犲嚱鏁?#8221;錛屽涓嬫墍紺恒傝繖鏍蜂竴鏉ワ紝浣垮緱瀵規(guī)煇涓?span style="font-family: monospace">stirng鐨勫彸鍊煎紩鐢ㄥ彲浠ュ崟綰湴浠庡彸鍊煎鍒跺叾鍐呴儴C-style鐨勬寚閽堝埌鏂扮殑string錛岀劧鍚庣暀涓嬬┖鐨勫彸鍊箋傝繖涓搷浣滀笉闇瑕佸唴瀛樻暟緇勭殑澶嶅埗錛岃屼笖絀虹殑鏆傛椂瀵硅薄鐨勬瀽鏋勪篃涓嶄細(xì)閲婃斁鍐呭瓨銆傚叾鏇存湁鏁堢巼銆?/p>

1
2
3
4
5
class string
{
    string (string&&); //move constructor
    string&& operator=(string&&); //move assignment operator
};

The C++11 STL涓箍娉涘湴浣跨敤浜?jiǎn)鍙冲煎紩鐢ㄥ拰move璇銆傚洜姝わ紝寰堝綆楁硶鍜屽鍣ㄧ殑鎬ц兘閮借浼樺寲浜?jiǎn)銆?/p>

C++ 11 STL 鏍囧噯搴?/h4>

C++ STL搴撳湪2003騫寸粡鍘嗕簡(jiǎn)寰堝ぇ鐨勬暣瀹規(guī)墜鏈?nbsp;Library Technical Report 1 (TR1)銆?TR1 涓嚭鐜頒簡(jiǎn)寰堝鏂扮殑瀹瑰櫒綾?(unordered_set, unordered_map, unordered_multiset, 鍜?nbsp;unordered_multimap) 浠ュ強(qiáng)涓浜涙柊鐨勫簱鏀寔璇稿錛氭鍒欒〃杈懼紡錛?tuples錛屽嚱鏁板璞″寘瑁咃紝絳夌瓑銆?C++11 鎵瑰噯浜?TR1 鎴愪負(fù)姝e紡鐨凜++鏍囧噯錛岃繕鏈変竴浜汿R1 鍚庢柊鍔犵殑涓浜涘簱錛屼粠鑰屾垚涓轟簡(jiǎn)鏂扮殑C++ 11 STL鏍囧噯搴撱傝繖涓簱涓昏鍖呭惈涓嬮潰鐨勫姛鑳斤細(xì)

綰跨▼搴?/h5>

榪欎滑灝變笉澶氳浜?jiǎn)锛屼互鍓嶇殑STL楗卞彈綰跨▼瀹夊叏鐨勬壒璇勩傜幇鍦ㄥソ 浜?jiǎn)銆侰++ 11 鏀寔綰跨▼綾諱簡(jiǎn)銆傝繖灝嗘秹鍙?qiáng)涓や釜閮ㄥ垎锛?xì)絎竴銆佽璁′竴涓彲浠ヤ嬌澶氫釜綰跨▼鍦ㄤ竴涓繘紼嬩腑鍏卞瓨鐨勫唴瀛樻ā鍨嬶紱絎簩銆佷負(fù)綰跨▼涔嬮棿鐨勪氦浜掓彁渚涙敮鎸併傜浜岄儴鍒嗗皢鐢辯▼搴忓簱鎻愪緵鏀寔銆傚ぇ瀹跺彲浠ョ湅鐪?a target="_blank">promises and futures錛屽叾鐢ㄤ簬瀵硅薄鐨勫悓姝ャ?nbsp;async() 鍑芥暟妯℃澘鐢ㄤ簬鍙戣搗騫跺彂浠誨姟錛岃?nbsp;thread_local 涓虹嚎紼嬪唴鐨勬暟鎹寚瀹氬瓨鍌ㄧ被鍨嬨傛洿澶氱殑涓滆タ錛屽彲浠ユ煡鐪?Anthony Williams鐨?nbsp;Simpler Multithreading in C++0x.

鏂板瀷鏅鴻兘鎸囬拡

C++98 鐨勭煡鑳芥寚閽堟槸 auto_ptr錛?鍦–++ 11涓搴熷純浜?jiǎn)銆?/code>C++11  寮曞叆浜?jiǎn)涓や釜鎸囬拡绫诲Q?nbsp;shared_ptr 鍜?unique_ptr銆?shared_ptr鍙槸鍗曠函鐨勫紩鐢ㄨ鏁版寚閽堬紝unique_ptr 鏄敤鏉ュ彇浠?code>auto_ptr銆?nbsp;unique_ptr 鎻愪緵 auto_ptr 澶ч儴浠界壒鎬э紝鍞竴鐨勪緥澶栨槸 auto_ptr 鐨勪笉瀹夊叏銆侀殣鎬х殑宸﹀兼惉縐匯備笉鍍?nbsp;auto_ptr錛?code>unique_ptr 鍙互瀛樻斁鍦?C++0x 鎻愬嚭鐨勯偅浜涜兘瀵熻鎼Щ鍔ㄤ綔鐨勫鍣ㄤ箣涓?/p>

涓轟粈涔堣榪欎箞騫詫紵澶у鍙互鐪嬬湅銆奙ore Effective C++銆嬩腑瀵?auto_ptr鐨勮璁恒?/p>

鏂扮殑綆楁硶

瀹氫箟浜?jiǎn)涓浜涙柊鐨勭畻娉曪細(xì) all_of(), any_of() 鍜?nbsp;none_of()銆?/code>

1
2
3
4
5
6
7
8
#include &lt;algorithm&gt;
//C++11 code
//are all of the elements positive?
all_of(first, first+n, ispositive()); //false
//is there at least one positive element?
any_of(first, first+n, ispositive());//true
// are none of the elements positive?
none_of(first, first+n, ispositive()); //false

浣跨敤鏂扮殑copy_n()綆楁硶錛屼綘鍙互寰堟柟渚垮湴鎷瘋礉鏁扮粍銆?/p>

1
2
3
4
5
#include &lt;algorithm&gt;
int source[5]={0,12,34,50,80};
int target[5];
//copy 5 elements from source to target
copy_n(source,5,target);

浣跨敤 iota() 鍙互鐢ㄦ潵鍒涘緩閫掑鐨勬暟鍒椼傚涓嬩緥鎵紺猴細(xì)

1
2
3
4
5
include &lt;numeric&gt;
int a[5]={0};
char c[3]={0};
iota(a, a+5, 10); //changes a to {10,11,12,13,14}
iota(c, c+3, 'a'); //{'a','b','c'}

鎬諱箣錛岀湅涓嬫潵錛孋++11 榪樻槸寰堝闄㈡淳錛屽緢澶氬疄鐢ㄧ殑涓滆タ榪樻槸娌℃湁錛屾瘮濡傦細(xì) XML錛宻ockets錛宺eflection錛屽綋鐒惰繕鏈夊瀮鍦懼洖鏀躲傜湅鏉ヨ絳夊埌C++ 20浜?jiǎn)銆傚懙鍛點(diǎn)備笉榪嘋++ 11鍦ㄦц兘涓婅繕鏄緢蹇傚弬鐪?Google’s benchmark tests銆傚師鏂囪繕寮曠敤Stroustrup 鐨勮鐐癸細(xì)C++11 鏄竴闂ㄦ柊鐨勮璦——涓涓洿濂界殑 C++銆?/p>

濡傛灉鎶婃墍鏈夌殑鏀瑰彉閮藉垪鍑烘潵錛屼綘浼?xì)鍙戠幇鐪熷鍟娿傛垜浼拌C++ Primer閭f湰涔︾殑鍘氬害瑕佸鍔犺嚦灝?0%浠ヤ笂銆侰++鐨勯棬妲涗細(xì)涓嶄細(xì)瓚婃潵瓚婇珮浜?jiǎn)鍛㈠Q熸垜涓嶇煡閬擄紝浣嗘垜涓漢瑙夊緱榪欓棬璇█鐨勭‘鏄彉寰楄秺鏉ヨ秺浠や漢鏈涜屽嵈姝ヤ簡(jiǎn)銆傦紙鎯寵搗浜?jiǎn)鏌愪汉鍜屾垜璇寸殑涓鍙ヨ瘽——瀛︽妧鏈湡鐨勬槸澶瘡浜?jiǎn)锛寴q樻槸鎼炴柟娉曡濂芥販浜涳紵錛?/p>

]]>
鍚勭紪璇戝櫒瀵逛簬C++11鏂扮壒鎬х殑鏀寔鎯呭喌http://www.shnenglu.com/tianbianlan/archive/2013/05/05/199991.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Sun, 05 May 2013 13:11:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2013/05/05/199991.htmlhttp://www.shnenglu.com/tianbianlan/comments/199991.htmlhttp://www.shnenglu.com/tianbianlan/archive/2013/05/05/199991.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/199991.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/199991.htmlhttp://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
The following table lists C++0x features and their support in popular compilers.

Status Of C++ 0x Language Features in Compilers

C++ 0x FEATURE

PAPER(S)

HP aCC

EDG eccp

GCC

Intel C++

MSVC

IBM XLC++

Sun/ Oracle C++

Embarcadero C++ Builder

Digital Mars C++

Clang

alignas

N2341

4.8

3.0

alignof

N2341

4.5

Yes

2.9

Atomic operations

N2427

4.4

13.0

11.0

3.1

auto

v0.9: N1984, v1.0: N2546

4.1(v0.9)

4.4(v1.0)

11.0(v0.9)

10.0(v0.9)

11.1 (V1.0)

Yes

C99 preprocessor

N1653

4.3

11.1

10.1

5.9

Yes

Yes

Concepts [removed]

N2617

ConceptGcc


constexpr

N2235

4.6

13.0

12.1

3.1

decltype

v1.0: N2343, v1.1: N3276

4.1(v1.0)

4.3(v1.0) 4.8.1(v1.1)

11.0(v1.0)

10.0(v1.0), 11.0(v1.1)

11.1 (V1.0)

Yes

2.9

Defaulted And Deleted Functions

N2346

4.1

4.4

12.0

3.0

Delegating Constructors

N1986

4.7


11.0 nov'12

11.1

3.0

Explicit conversion operators

N2437

4.5

13.0

11.0 nov'12

12.1

Yes

3.0

Extended friend Declarations

N1791

4.1

4.7

11.0

10.0***

V1R11,11.1

2.9

extern template

N1987

3, 5, 6

3.3

9

6.0

V1R11,11.1

Yes

Yes

Forward declarations for enums

N2764

4.6

11.0

12.1

3.1

Inheriting Constructors

N2540

4.8



Initializer Lists

N2672

4.4

13.0

11.0 nov'12

3.1

Lambda expressions and closures

v0.9: N2550, v1.0: N2658, v1.1: N2927

4.1(v0.9)

4.5(v1.1)

11.0(v0.9)
12.0(v1.0)

10.0(v1.0), 11.0(v1.1)

3.1

Local and Unnamed Types as Template Arguments

N2657

4.5

12.0

10.0

2.9

long long

N1811

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Namespace Association

N2535

4.4


11.1

2.9

New character types

N2249

4.4

2.9

New function declaration syntax for deduced return types

N2541

4.1

4.4

12.1

10.0

12.1

2.9

nullptr

N2431

4.6

12.1*

10.0

2.9

Unicode String Literals

N2442

4.4

11.0*

5.7

Yes

3.0

Raw String Literals

N2442

4.5


11.0 nov'12

Yes

User-defined Literals

N2765

4.7

3.1

Right Angle Brackets

N1757

4.1

4.3

11.0

8.0

12.1

Yes

R-Value References, std::move

v1.0: N2118, v2.0: N2844, v2.1: N2844+, v3.0: N3053

4.1(v1.0)

4.3(v1.0)
4.5(v2.1)
4.6(v3.0)

11.1(v1.0)
12.0(v2.0)

10.0(v2.0), 11.0(v2.1)

12.1(v2.1)

Yes

Yes

static_assert

N1720

4.1

4.3

11.0

10.0

11.1

Yes

2.9

Strongly-typed enums

N2347

4.4

12.0

11.0

12.1

Yes

2.9

Template aliases

N2258

4.7

12.1

3.0

Thread-Local Storage

N2659

4.8 (4.4****)

11.1***

10.0***

5.9***

2.9****

Unrestricted Unions

N2544

4.6


3.0

Built-in Type Traits

N1836

6.16

4.0

4.3

10.0

8.0

Yes

3.0

Variadic Templates

v0.9: N2242, v1.0: N2555

4.1(v0.9)

4.3(v0.9) 4.4(v1.0)

12.1(v0.9)

11.0 nov'12

11.1 (v0.9)

2.9(1.0)

Range-based for-loop

N2930

4.6

13.0

11.0

3.0

override and final

v0.8: N2928, v0.9: N3206, v1.0: N3272

4.7

12.0(v0.8)***

8.0(v0.8)*** 11.0(v1.0)

2.9

Attributes

N2761

4.8

12.1

ref-qualifiers

N2439

4.8.1

2.9

Non-static data member initializers

N2756

4.7

3.0

Dynamic initialization and destruction with concurrency (Magic statics)

N2660

4.3

?

2.9

* — 1) unicode string literals is a feature of the EDG frontend, but it is undocumented at Intel C++ compiler (/Qoption,cpp,"--uliterals" option enables it)



]]>
久久水蜜桃亚洲av无码精品麻豆| 思思久久精品在热线热| 久久99九九国产免费看小说| 色噜噜狠狠先锋影音久久| 亚洲精品无码久久久久| 久久经典免费视频| 精品欧美一区二区三区久久久| 久久av无码专区亚洲av桃花岛| 久久频这里精品99香蕉久| 国产精品久久久99| 久久国产亚洲精品麻豆| 久久国产精品无码HDAV| 久久Av无码精品人妻系列| 久久99热只有频精品8| 久久久久亚洲AV无码网站| 色欲综合久久中文字幕网| 麻豆亚洲AV永久无码精品久久 | 精品久久久久久中文字幕大豆网| 久久精品免费大片国产大片| 久久精品国产亚洲一区二区三区| 久久青青国产| 亚洲精品国产自在久久| 狠狠色丁香婷婷久久综合| 久久精品一本到99热免费| 一本色综合网久久| 久久精品亚洲一区二区三区浴池| 久久久久亚洲av无码专区导航| AAA级久久久精品无码片| 91精品日韩人妻无码久久不卡| 91麻豆精品国产91久久久久久| 久久久久亚洲精品中文字幕| 九九精品久久久久久噜噜| 久久久久久国产精品无码超碰| 69久久精品无码一区二区| 久久se这里只有精品| 久久久精品国产| 久久97精品久久久久久久不卡| 国内精品久久久久国产盗摄| 久久精品综合网| 国产三级久久久精品麻豆三级| 国产日韩欧美久久|