※ 本文為 xxxx9659.bbs. 轉寄自 ptt.cc 更新時間: 2013-02-06 22:10:49
看板 C_and_CPP
作者 標題 [分享] C++ Primer 5e , C++ 11 tutorial
時間 Fri Feb 1 03:39:57 2013
目錄 BEGIN _______________________________
零 、 前言
壹 、 基本資料型態
(1) nullptr < g++ , vc support >
(2) constexpr < g++ , vc support >
(3) type aliases < g++ support only >
(4) auto type < g++ , vc support >
(5) decltype < g++ , vc support >
貮 、 String, Vector, Arrays
(1) range for statement < g++ , vc support >
(2) 套嵌式 template < g++ , vc support >
(3) vector constructor , assign element < g++ support only >
(4) begin / end < g++ , vc support >
(5) vector<T>::cbegin() , vector<T>::cend() < g++, vc support >
參 、 函式 Functions
(1) initializer_list < initializer_list parameters , g++ support only >
肆 、 類別初步
(1) constructor , = default < g++ support only >
(2) class 定義時初始化成員 < g++ support only >
(3) delegating constructors < g++ support only >
伍 、 循序式容器
(1) 新增 std::forward_list < g++ , vc support >
(2) 新增 std::array < g++ , vc support >
(3) std::string < g++ , vc support >
陸 、 泛型算法
(1) lambda 簡介 < g++ , vc support >
柒 、 其他...
目錄 END __________________________________
零 、 前言_________________________________
雖 C++ 不熟,唯最近出現一些語法讓筆者感到十分錯愕,後來才知道不少學校及
一些業界已開始跟進 C++ 11,於是狠下心再把 C++ Primer 5e K 過一遍 ( 和 4e 差
別蠻大的,除了 C++ 11 外,編排也有些異動),做一些 note ,整理後做為分享。提
醒,真的只供 tutorial,畢竟目的是: C++ -> C++11 && Primer 4e->5e,內容比不上
C++ 11 FAQ 精彩。 C++ 11 FAQ : http://www.stroustrup.com/C++11FAQ.html
若覺得我有誤會書中之意,請不吝告知;覺得專有名詞中文翻得很爛,也請不吝指正
,使用編譯器主要為 Code::Blocks(g++ 4.6.1),VC2012,內文提供的 g++、vc,指的是
這兩種版本之編譯器。然後 STL 實在是太過於包山包海,加上還有新增新的 container
,這裡全略過,有興趣可到 C++ Reference 或相關網站查詢,STL 部份及其之
,使用編譯器主要為 Code::Blocks(g++ 4.6.1),VC2012,內文提供的 g++、vc,指的是
這兩種版本之編譯器。然後 STL 實在是太過於包山包海,加上還有新增新的 container
,這裡全略過,有興趣可到 C++ Reference 或相關網站查詢,STL 部份及其之
member function 相關說明均會再加註是否為 C++ 11。
壹 、 基本資料型態 < C++ Primer 5e , Chapter 02 > ______________
(1) nullptr < g++ , vc support >
在 C language 裡一些法則會提到, 指標最好初始化設 NULL,唯 NULL 是以
macro 方式定義,在 C 裡定義成 ( (void*)0 ),C++ 定義成 0,而 C++ 11 多了
nullptr,故程式碼裡可這麼用
int * ptr = nullptr;
vector<int> *v = nullptr; /* v 的宣告其實不好 */
(2) constexpr < g++ , vc support >
一變數被宣告成 constexpr 時,就必須被初始化。
constexpr int expr = 20;
constexpr int limit = mf+1;
constexpr int * q = nullptr;
constexpr int new_sz() { return 42; }
constexpr int foo = new_sz();
值得注意的是,上述的 constexpr int foo,在編譯期時便會呼叫 new_sz(),填入
foo 裡。也由於為了 constexpr 能在編譯期時立即被展開,實際上是隱喻的使用了
與實體沒辦法拆成 .h / .cpp 兩個檔案進行實作。
(3) type aliases < g++ support only >
一般想要重定義一個資料型態時,早期是用 typedef 方式去做,如
typedef unsigned char byte;
typedef unsigned int word;
int add(int a, int b) {return a+b;};
typedef int (*fptr)(int, int); // aliase declare function pointer
C++ 11 多了 using 可用
using byte = unsigned char;
using word = unsigned int ;
using fptr = int (*)(int, int); // aliase declare function pointer
※ vc2012 不支援 using 做 type aliase
(4) auto type < g++ , vc support >
auto 算是我認為 C++ 11 裡對初學者的一項福音(也可能不是),以往之 C/C++
auto 主要是修飾變數之生命週期,相關章節在提到 auto 時可能還會再提到幾個識別
字:auto、static、register、extern,好一點的會再提比較冷門的識別字,如
volatile、restrict 等。
auto 這關鍵字到 C++ 11 時,不確定是轉義(原本的用法拿掉)還是多義(兼顧
原本的用法)。使用 auto 宣告一變數時,必須給定初值,該變數之資料型態會自己
推導。如
原本的用法)。使用 auto 宣告一變數時,必須給定初值,該變數之資料型態會自己
推導。如
int i = 10;
auto ai = i; /* ai 最後被宣告成 int */
vector<int> v(10,0);
auto av = v;
for( auto itr = av.begin() ; itr!=av.end(); ++itr) /* 可用在 iterator */
*itr += 10;
double d = 2.7;
auto dvar = d + i; // double op int , 會被推成 double
當然筆者是認為 初學階段 不要過於依賴 auto,不然很多概念會弄得亂七八糟
(這句刪除)。比較讓人感到困惑的是關於 pointer / reference 之應用。
int i = 0, &r = i;
auto a = r; // a 被推成 int , 初值就是 i 值
auto p = &i; // p 被推成 pointer
auto & af = i; // af 被推成 reference to int variable.
另若原變數有加 const 修飾時也可另外推出來、auto 又可再加 const 加以修飾,
這個推下去過於贅述,點到為止。另再一點注意的是,auto 別拿來當 func 之引數修飾
,諸如 auto max(const auto & a ,const auto & b); 該用 template 就用 template。
(5) decltype < g++, vc support >
C++ 11 裡,decltype 是個新的關鍵字。假設已宣告 int a; 現又欲將變數 b 宣告
得和變數 a 一樣時,這時 decltype 便可使用。 decltype(a) b; // b 之資料型態與 a 同。
decltype 也可放 function(),將會推導出該 function 傳回值之資料型態,如
int f1(double){return 1;} // f1 return int
decltype(f1()) c; // c 會被宣告成 int
上面的 decltype(f1()),實際上並不會真的去呼叫 f1 function,所以不用擔心
效率太差問題。有幾種狀況可能比較不容易想,下面列出一些
int i=0;
int *p = &i, &r=i;
decltype(r + 0) b; // 相加後還是 int , b 宣告成 int
decltype(*p) c=i; // c 宣告成 int& , 初值綁定在 i 上
decltype( (what_ever) ) x; // 加兩個括號的, x 一定是 reference,故要給初值
自然的以往使用的 std::string::size_type idx=0 也可直接以 auto 或
decltype 方式完成。故要 aliase 函式指標時就變得簡單許多。
int add(int a, int b){return a+b;}
typedef int (*fptr1)(int, int) ; // typedef
using fptr2 = int (*)(int, int); // C++ 11 using aliase
typedef decltype(add) * fptr3 ; // typedef + decltype
fptr1 f1 = add;
fptr2 f2 = add;
fptr3 f3 = add;
decltype(add) * f4 = add; // 其實小程式用這個就行,不太需要 typedef
auto f5 = add; // auto 無敵 ??
當然做 function pointer typedef 還有另一種風格,與 C++ 11 相關性不大,
這裡就不再贅述。貮 、 String, Vector, Arrays <C++ Primer 5e , Chapter 03 > _________
(1) range for statement < g++ , vc support >
在早期 C/C++ 裡用 for 對特定容器裡之每個元素做一段敘述時(如字串轉大寫),
寫法可能如下
string s = "EdisonX";
for( decltype( s.length() ) idx=0; idx!=s.length(); ++idx)
s[idx] = toupper(s.at(idx));
cout << s << endl;
先小複習一下,上面的 idx 在這裡用 decltype(s.length()) 會比 auto 適當些,
原因應不用多述。且實際上並不會真的去呼叫 string::length(),只會推型別而已。一樣的事,C++ 11 對於 for loop 可改成下面型式
string s = "EdisonX";
for(auto &ch : s) // 對象換成了 each ref. character ch in string s
ch = toupper(ch);
cout << s << endl;
range for 較正式的表示為
for( declaration : expression ) for( 變數宣告 : 表達 )
statement 敘述
整體用起來頗像 for_each 。注意,第二段的 auto &ch 指的就是 char &ch。所以要
算有幾個大寫、小寫字元之類的也不是問題,另這種 range for statement 也適用於一
般 array。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int s=0;
for( decltype(arr[0]) ele : arr) s+=ele;
cout << s << endl;
其他有興趣可再自己摸摸,它可以再配合 continue、break 。
(2) 套嵌式 template
早期在寫 vector<vector<int>> 時,部份 compiler 會把最後的兩個連在一起的角
括號 >> 視為 shift operator >> ,所以書上會建議多一個空間做分格,變成vector<vector<int> >,便不會發生這問題。C++ 11 已把這個納到規範去,不過注意的
是,compiler 會怎麼解讀 vector<vector<int>> 又是一回事,畢竟規範和實作(實際
(3) vector constructor , assign element < g++ support only >
在 C++ 11 之前,vector 之 constructor 及初始化其實蠻有限的,像是它不能達
到 int arr[]={1,2,3,4} 這種作法,但 C++ 11 之後這行得通了,如
vector<string> str = {"Hi","Ptt","EdisonX"};
for(string s : str) cout << s << endl;
這種方式是藉由 in-class initializer 完成,換而言之,若是要搞 saw array 時
也可像下面這樣搞,vector<vector<int> > arr = {
{1,2,3}, {4,5,6,7,8},
{9,10}, {11,12,13,14,15}
};
arr[0] = {11,22,33}; // OK
for(auto Row: arr) for(auto ele : Row)
cout << ele << endl;
上述的 auto Row, auto ele 可寫成 auto & Row, auto & ele,細節差異是
之前就知道的事,就不再贅述。值得注意的是,C++ 11 幾乎所有 container 都支
援 in-class initializer (目前還沒看到沒支援的),同時這特性也被支援到 new
身上,如下例是合法可行的。
援 in-class initializer (目前還沒看到沒支援的),同時這特性也被支援到 new
身上,如下例是合法可行的。
int * arr = new int[3] { 1, 2, 3};
但比較可惜的是,VC 2012 並沒做到這種地步,也就是 vc 2012 不支援 in-class
initializer。
(4) begin / end < g++, vc support >
傳統初學者寫 function 時,大多有兩種方式,一種是傳 pointer + size;另一種
是 STL 設計方式,傳 begin pointer / end pointer (pointer 講成 iterator 較佳),
假設找某個 array 裡第一個出現 val 之位置時,func 與 caller 可能長得像這樣
int * find(int * start , int * last , int val) {
for( ; start!=last ; ++start)
if(*start==val) return start;
return last;
}
int arr[] = {1,2,3,4,5};
int *pos4 = find(arr, arr+5, 4); // 注意這行
cout << *pos4;
主要在 caller 端,可以有其他的方式做處理,上面註解的部份換過變成如下,
int *pos4 = find(begin(arr), end(arr), 4);
換而言之,在求靜態陣列元素個數時,以往是習慣用 sizeof(arr)/sizeof(arr[0])
或 sizeof(arr) / sizeof(*arr),所以到 C++11 時多了一種選擇,
auto arr_size = begin(arr) - end(arr);
不過這裡要強調,上面不是種好的寫法,因實際傳回值是 ptrdiff_t,而非 size_t,
比較尷尬的是不能對於由 new 產生之空間做處理,下述範例便是錯誤示範。。
int *arr = new int[5];
for(int i=0; i<5; ++i) arr[i] = i;
int *pos4 = find(begin(arr), end(arr), 4); // fail
(5) vector<T>::cbegin() , vector<T>::cend() < g++, vc support >
直接看碼和註解吧。
vector<int> v={1,2,3}; // vc2012 不支援這裡
auto it_beg = v.cbegin() ; // vector<int>::const_iterator it_beg;
auto it_end = v.cend(); // vector<int>::const_iterator it_end;
while(it_beg != it_end)
cout << *it_beg++ << endl; // 綁定對象為唯讀,可改綁定對象
參 、 函式 Functions < C++ Primer 5e, Chapter 06 >____________
(1) std::initializer_list < initializer_list parameters , g++ support only >
C 語言裡還在使用的不定參數 - va_list(),va_start(),va_end(),va_arg(),
C++ 11 可能準備要走入歷史了。
假設要計算輸入一串數值之總合,可用不定參數去做,不示範。而 C++ 11 多了
initializer_list 後,其實更方便,
int sum(initializer_list<int> L)
{
int s = 0;
for(auto beg = L.begin() ; beg!=L.end(); ++beg)
s+=*beg;
// for(const auto & ele : L) s+=ele; // using range for method
return s;
}
int rst = sum ( {1,2,3,4,5} ); // 注意這裡怎寫的
cout << rst ;
要做成 template 也沒問題,變成 T sum(initializer_list<T> L); 不再贅述。
肆 、 類別初步 < C++ Primer 5e, Chapter 07 >________________
(1) constructor , = default < g++ support only >
考慮下面之 class
class C{
string a="a", b="b", c="c"; // c++ 11 support
public:
C(string a, string b , string c) : a(a), b(b), c(c) {}
C() = default;
};
裡面的 C() = default ; ,乃由於已有第一種版本 ctor (三個 string),想要
相容於無引數之 ctor,故直接寫下 C() = default,讓編譯器可接受且自動產生,無
(2) class 定義時初始化成員 < g++ support only >
上述例子裡,在早期的編譯器沒辦法直接在為 class 定義時,便給變數初始值,
諸如上頭之 string a, b, c 都做了這種事(除了靜態 const 整數資料可能除外),
但在 C++ 11 裡面,允許這麼做,當寫下 C obj; 時,obj 裡之 string a, b, c 都將
被初始化完畢。 (3) 委派建構子 < delegating constructors , g++ support only >
早期之編譯器,ctor 可以呼叫任何 member function,就只有其他之 ctor 與 dtor
不可呼叫。C++ 11 在 ctor 初始列時可用委派方式呼叫其他 ctor,下列為一範例,
class String{
private:
char *buf;
size_t length, capacity;
public:
String() : buf(nullptr), length(0), capacity(0){}
String(const char * str) : String() { /* whatever */ }
};
當然也可以將 String() 委派給 String(const char *),不再示範。另外
constructor 也可加上 constexpr 做修飾,這裡不再深入。
伍、循序式容器 < Sequence Container , C++ Primer 5e, Chapter 09 >______
(1) 新增 std::forward_list < g++ , vc support >
使用前引入 #include <forward_list> ,實作之資料結構為 single link list,
std::list 裡之所有尾端操作都不支援。
(2) 新增 std::array < g++ , vc support >
使用前引入 #include <array>,大小為固定,不支援 remove, resize。
(3) std::string < g++ , vc support >
早期用字串數值轉換全都是用 istringstream、ostringstream,C++ 11 多了一系
列函式專做這事情,包含 to_string, stoi, stol, stoul, stoull, stof, stod,
stold,整個和 C-style 很像 (atoi / stoi, a 換成 s 而已)。
陸、泛型算法 < Generic Algorithms , C++ Primer 5e , Chapter 10 >_____
(1) lambda 簡介 < introducting lambdas >
這功能大概是 C++ 11 最神奇進展之一 < 講白了是給一個 non-name function ? >
。lambda 標準之型式如下
[capture list] (parameter list) -> return type { function body }
[ 捕獲列 ] ( 參數列 ) -> 傳回值 { 函式內容 }
其中 參數列 與 傳回值 可略,但 capature list 與 函式內容 不能略,看起來很亂
,不過這標準型式大概是要熟記的東西,不然後面的也玩不下去。直接看例子
auto f = [] {return 10;}; // 建立一個可呼叫物件,傳回 10
cout << f() << endl; // 輸出 10
上述之 auto f 就省掉了 parameter list 與 return type,寫完整的話如下
auto f = [](void) -> int {return 10;};
一個簡單的應用,假設要調用 algorithm 裡之 sort 對 struct 做排序時,舊式寫
法大概如下
struct Num{ int n;};
bool compare (const Num & a, const Num & b){return a.n < b.n;}
Num arr[] = { {5}, {2}, {1}, {3} };
sort(arr, arr+4, compare);
for(size_t i=0; i<4 ; ++i) cout << arr[i].n << ' ';
裡面的 compare function,便可以 lambda 示之,如下。
Num arr[] = { {5}, {2}, {1}, {3} };
sort(
begin(arr), end(arr),
[](const Num & a, const Num & b)
-> bool { return a.n < b.n;}
);
for_each(
begin(arr), end(arr),
[](const Num & num)
->void {cout << num.n << ' ';}
);
上面紅色部份 ( -> bool , -> void ) 都是可省略的。由於 lambda 實在是可以
出一本書,這篇文章就點到這裡為止,Lambda Capture List 被我全跳光了,其他有興趣可再找額外書籍或文章補充,C++ Primer 5e 放在 10-3。
柒、其他..._________________________________
這篇暫時到這裡,主要是後半段蠻長一大段時間是在講 STL library 的東西,筆者
認為直接到 C++ reference K 過一遍比在這裡看文章有效率多了。
另 OO 部份範例碼都過長,決定全都拿掉(疑!那怎麼這篇好像變得都講垃圾話了)
,但 rvalue 概念在 class OO 裡又是新的東西,C++ Primer 5e, Ch13 蠻長篇幅在討論
這個。另個人認為版上是有篇文章必讀便是
,但 rvalue 概念在 class OO 裡又是新的東西,C++ Primer 5e, Ch13 蠻長篇幅在討論
這個。另個人認為版上是有篇文章必讀便是
#19gioP8j (C_and_CPP)
作者 yoco315 (眠月)
標題 [翻譯] Rvalue References: C++0x Features in VC10, Part 2
結論是,雖 C++ Primer 4e 真的寫的不錯,不過個人目前讀 5e 到 Ch15 ,其實編
排感覺比以前好些,雖有些範例和以前相仿,不過有些有改成 C++ 11 語法方式撰寫,
手邊若有 4e ,經濟許可的話收個 5e 應不會後悔。
排感覺比以前好些,雖有些範例和以前相仿,不過有些有改成 C++ 11 語法方式撰寫,
手邊若有 4e ,經濟許可的話收個 5e 應不會後悔。
本文敘述至此,講得太淺請海函,有誤也請不吝指正,謝謝各位收聽。
--
~ 這輩子與神手無緣
我只好當神獸了 ~
卡卡獸
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
推 :先推之後慢慢看1F 02/01 04:35
推 :E大必推!讚!2F 02/01 04:57
推 :推薦這篇文章3F 02/01 05:16
推 :感謝分享4F 02/01 08:11
推 :推!!!!5F 02/01 09:38
推 :應該優先使用auto除非你想要轉型6F 02/01 10:01
推 :全部看完了~推!7F 02/01 10:02
推 :先推再看~8F 02/01 10:05
→ :另外還有 universal reference 這個新"概念" 需要跟10F 02/01 10:09
→ :auto&&, T&&(template) 一起學習
→ :http://ppt.cc/4-p~
→ :auto&&, T&&(template) 一起學習
→ :http://ppt.cc/4-p~
C++ and Beyond 2012: Scott Meyers - Universal References in C++11 | Going Deep | Channel 9
Scott Meyers presents "Universal References in C++11". This was filmed at C++ and Beyond 2012. This is the full session in all of its splendor. Huge thanks to Scott for ...
Scott Meyers presents "Universal References in C++11". This was filmed at C++ and Beyond 2012. This is the full session in all of its splendor. Huge thanks to Scott for ...
對,這一大段都是在 Primer 5e Part III 講的,ch13 講最多,其中一項
標題就變成了 The Rule of Three/Five ,照本宣科實在是太長了。
推 :只看到三分之一,寫得不錯,建議加個目錄,感謝分享15F 02/01 10:42
已補上,謝謝 p 大建議 :)
推 :現在在學C++ 面臨了4e中文版和5e英文版的抉擇T^T16F 02/01 10:52
別猶豫了,買 5e 就對了,編排 5e 比 4e 佳,還多了幾個有趣的例子。
4e 中文版我看到後面受不了,回來翻英文,看得比較順。
推 :推17F 02/01 10:57
→ :請問一下, 參(1) 的範例 vc2010 過不了18F 02/01 11:34
→ :是不是因為 貳(3) 的關係?
→ :是不是因為 貳(3) 的關係?
VC 2010 我沒再試過,但照您所述,可能是 VC2010 沒 support
std::initializer_list。 VC 系列之前就據聞對 C++ 11 之支援性很慢,所以
拿最新的VC2012 來測。
→ :to coolcomm, 5/e中文版已經出版了啊~20F 02/01 11:56
→ :那是Plus版吧@_@ Plus好像是到6/e才有C++1121F 02/01 12:15
推 :推:)22F 02/01 12:20
推 :先推在看23F 02/01 12:31
→ :@kiedveian 因為原PO測的版本是 VC1124F 02/01 16:59
推 :娘子啊!快出來看神蹟啊!25F 02/01 17:42
推 :推(Y)26F 02/01 18:25
推 :Push27F 02/01 19:05
推 :推 lambda超棒~28F 02/01 19:38
→ :我用VS2012連initializer_list這個檔案都找不到……29F 02/01 21:08
抱歉,剛再拿 vc 來測,發現應是當時紀錄時紀錄錯了,目前 vc 的確沒支援這裡;
然後你說的 vc11 連 header 都沒找到,是因當時在 vc11 規劃時就準備拿掉它,詳
情可看這篇連結 http://ppt.cc/4XG8
另補上 vc11 對於 C++ 11 之支援 http://ppt.cc/lIAw
然後我也在找 vc 有沒有 c++ 11 feture extend package 之類的東西,不過目前
看似沒有 ( 不過也不意外, M$ 大概把精力大多放在自家產品上了吧 )。
推 :對不起是我搞錯了 orz30F 02/02 09:21
推 :大大你好小弟是C++新手 只修過一學期的大學部課程31F 02/02 11:08
→ :想請大大推薦一本適合重學讀的 中文版猶佳
→ :如果中文版大大覺得都沒有翻很好的 英文版也可以
→ :想請大大推薦一本適合重學讀的 中文版猶佳
→ :如果中文版大大覺得都沒有翻很好的 英文版也可以
推 :推34F 02/02 11:35
→ :@ tom~ : 目前建議挑有 C++11 的書籍,所以不可能挑中文書35F 02/02 11:43
→ :套崁 -> 套嵌(ㄑㄧㄢ)36F 02/02 18:26
已修正,謝謝 :)
推 :我覺得auto那個最好不要用 到時浮點取整啥的不容易偵錯37F 02/03 00:09
推 :那個等到很長的template type再用...
→ :看到的感覺是:強烈建議新手忘記有auto...
推 :那個等到很長的template type再用...
→ :看到的感覺是:強烈建議新手忘記有auto...
推 :先推一個 大大人太好了 感謝~40F 02/03 00:20
→ :不同意 auto 那一段,不然不適合寫動態分型的語言41F 02/03 07:43
→ :auto 有句話我覺得我說的比較不切意,所以用灰色拿掉.44F 02/03 17:15
→ :auto舊義似乎已經刪除了,改為自動型態的樣子45F 02/03 18:11
→ :然後auto不能當參數這點希望可以說得明顯一點@@
→ :然後auto不能當參數這點希望可以說得明顯一點@@
推 :我個人是大量的使用decltype在function parameter47F 02/04 12:49
→ :在range-for loop則大量用auto
→ :基本上 能用decltype我就會用... 我覺得還蠻直觀的
推 :另外 文中 decltype(di) ddi = di; // ddi 宣告成int&
→ :應該是寫錯?? O.O 應該是int ?!
→ :在range-for loop則大量用auto
→ :基本上 能用decltype我就會用... 我覺得還蠻直觀的
推 :另外 文中 decltype(di) ddi = di; // ddi 宣告成int&
→ :應該是寫錯?? O.O 應該是int ?!
這裡是我眼花,誤會了書中範例的意思,(5e,2.5.3),相關示例已拿除,謝謝指正。
然後建不建議使用 auto 的議題我想可以先停下來了,對有經驗老手而言很方便,對
新手而言我比較擔心用慣了之後,STL 的 type 都不想去注意,也不注意一些資料轉型所
帶來的副作用。除了數值相關問題,auto 對老手確實是一大福音。
推 :thanks52F 02/04 16:09
推 :不然vector<map<A, B, bool(*)(A,A)> >::iterator it =53F 02/04 17:14
→ :這種東西就算typedef了一堆也超麻煩的XD
→ :auto和lambda算是我換c++11最大的誘因
→ :這種東西就算typedef了一堆也超麻煩的XD
→ :auto和lambda算是我換c++11最大的誘因
推 :話說delctype是preprocessor處理的嗎? 雖然沒有#56F 02/04 18:34
→ :因為IDE對decltype可以進行解析 對auto就不能了...
→ :因為IDE對decltype可以進行解析 對auto就不能了...
推 :不可能是preprocessor處理的吧 compiler在做的58F 02/04 18:38
→ :我的小蕃茄可以做auto,decltype反而不行(版本有點舊)59F 02/04 18:52
→ :至於Intellisense...他從來沒好過XD
→ :至於Intellisense...他從來沒好過XD
推 :讚讚!!61F 02/06 21:37
--
※ 看板: xxxx9659 文章推薦值: 0 目前人氣: 0 累積人氣: 198
回列表(←)
分享