《深入應用C++11:代碼優化與工程級應用》勘誤表,會不斷更新,歡迎讀者留言或發郵件(cpp11book@163.com)給我提出寶貴意見。
1.第7.3節目錄final和override關鍵字應該改為標識符;
這個問題由園友“李奧霍克”和“Cu2S”指出, 在此表示感謝。
2.page 156, 倒數第三行代碼newint應該為new int
3.page 177,倒數第三行語句unique_lock多寫了一個,應該去掉一個。
上面這兩個問題是讀者玄龠指出的,在此表示感謝。
4.page 4, 倒數第9,10行注釋中的變量名e和f應該改為g和h
上面這個問題由讀者zeno指出的,在此表示感謝。
5.page 406, 多寫了一個AsyncSend函數。
這個問題由讀者YZB_007指出,在此表示感謝。
6.page 28, 倒數第二行“而對於非集合類型,則需要先自定義一個合適的構造函數”中的“非集合類型”應該改為“非聚合類型”。
這個問題由讀者jingyigang指出的,在此表示感謝。
7. page 63, 第二行“第2章”應該改為“第3章”。page 155, 倒數第5行"std::uniq_ptr"應該改為“std::unique_ptr“。158頁,第三行代碼"return stared_ptr<S>(this);"類型S應該是A。
這三個問題由讀者YZB_007指出的,在此表示感謝。
8.page74,倒數第二和第三行"_len"和"_data"應該為"m_len"和"m_data"。page 173,代碼清單5-2中,both函數寫到Complex類的外面了,應該放里面。
這兩個問題由讀者“勇者之驍”指出,在此表示感謝。
9. page212,第二行,應該是"否則返回false."
這個問題由讀者YZB_007指出的,在此表示感謝。
10. page260, foo函數里,根據結果運行圖10-3和編譯調試,foo的輸出應該為:
cout << "real foo function:" << a << endl; 而不是書中寫到是real HT function
這個問題由讀者YZB_007指出,在此表示感謝。
11. page337, 第三行缺少一個"]"符號;page359, TestLinqCpp()里變量vct應該為v,min和max應該改為Min和Max。page355, 第二行"decltype(begin())"應該改為"decltype(boost::make_iterator_range(std::find_if_not(begin(), end(), f), end()))"
page352, 兩個count函數應該改為:
auto count() const -> decltype(std::distance(begin(), end())) { return std::distance(begin(), end()); } template<typename F> auto count(const F& f) const -> decltype(std::count_if(begin(), end(), f)) { return std::count_if(begin(), end(), f); }
這幾個問題由讀者YZB_007指出,在此表示感謝。
12. page16, 第二行 "c++" 應為 "c++98/03"; page21, 第一段代碼返回處為 "ret val" ,應為 "val;"; page61, 最后一行 "tuple<constchar*, int>tp" 應為 "tuple<const char *, int> tp"
13.page62, 代碼段"auto tp = return std::tie(1, "aa", 2);"語法錯誤,要去掉return,tie不能綁定右值,應該改為:
int x = 1; int y = 2; string s = "aa"; auto tp = return std::tie(x, s, y);
接下來一段代碼中"constchar*" 應為 "const char *","tp.get"應該改為“std::get”
14.page62, 介紹forward_as_tuple的用法寫錯了,應該改為:
std::map<int, std::string> m; m.emplace(std::piecewise_construct, std::forward_as_tuple(10), std::forward_as_tuple(20, 'a'));
上面這幾個問題由讀者mogu指出,在此表示感謝。
15. page68, 代碼"int&& var1 = x; //var1"應該改為"int&& var1 = 1; //var1", 這個問題由讀者YZB_OO7指出,在此表示感謝。
16. page85, 第7行 "需要提供函數和比較函數" 應為 "需要提供Hash函數和比較函數"。page89, "struct is_union;" 的解釋錯誤,應該是 "判斷T是否為union類型"。page90 最后的兩行中 "unsignedint" 與 "signedint"缺少空格,應為 "unsigned int" 與 "signed int"。
17.page93,第二行decay的描述不太准確,應該是移除引用和cv,函數或數組退化為指針。page99第二段和第三段代碼中的很多空格被被吃掉了。page101,"returnt"應該改為"return t"。page107,109, "structSum"應該為"struct Sum";page108,第二段代碼中 "sizeof (First);" 應該為 "sizeof(Last);"。
18.page110,第二行 "MakeIndexes<1,2,3>::type" 應該為 "MakeIndexes<3>::type"; page121, 注釋 "不帶參數的 lamda" 應該為 "不帶參數的 lambda", 下一行的 "return12" 應為 "return 12"
19. page122, 最后一段代碼的錯誤:pMax, pGet 后文寫成了 PMax PMin, hMode 后文寫做 hDLL; page124, 函數名“ExcecuteFunc”應該為"ExecuteFunc"。page113, 最下面的Instance函數中缺少了模板參數T。
上面的這些問題由讀者mogu指出,在此表示感謝。
20.page126, 第一段代碼中的 "return0;" 應為 "return 0;", page127, Then的實現中"[func, &f]"應改為"[func, f]", page129, 第8行"emplate"應該為"template", page136, 第8行"it->first"應該為"v", 最后三行中Integer Max應該為IntegerMax;
page137, 第4行MaxType應該為IntegerMax; page141, 3.3.9 上面的一段是屬於3.3.2lazy的那一節,不應該在這里。
上面的這些問題由讀者mogu指出,在此表示感謝。
21.page21, 關於模板參數的順序搞錯了,現更正如下:
但需要注意的是,在調用函數模板時,若顯示指定模板的參數,由於參數填充順序是從左往右的,因此,像下面這樣調用:
func<long>(123); // func的返回值類型是long
函數模板func的返回值類型是long,而不是int,因為模板參數的填充順序從左往右,所以指定的模板參數類型long會作為func的返回值類型而不是參數類型,最終func的返回類型為long。
這個問題由讀者evenstar,mogu等網友指出,在此表示感謝!
22.296頁中的測試結果.
24.
104頁最后和105頁上面,模板的聲明對不上
也歡迎更多的讀者來指出問題和提出寶貴意見。