《深入應用C++11:程式碼優化與工程級應用》勘誤表
轉自:http://www.cnblogs.com/qicosmos/p/4562174.html
整理一下吧,原文好亂。。。。。。。。。。。。。。。
page 4, 倒數第9,10行註釋中的變數名e和f應該改為g和h
page16, 第二行 "c++" 應為 "c++98/03"; page21, 第一段程式碼返回處為 "ret val" ,應為 "val;"; page61, 最後一行 "tuple<constchar*, int>tp" 應為 "tuple<const char *, int> tp"
page21, 關於模板引數的順序搞錯了,現更正如下:
但需要注意的是,在呼叫函式模板時,若顯示指定模板的引數,由於引數填充順序是從左往右的,因此,像下面這樣呼叫:
func<long>(123); // func的返回值型別是long
函式模板func的返回值型別是long,而不是int,因為模板引數的填充順序從左往右,所以指定的模板引數型別long會作為func的返回值型別而不是引數型別,最終func的返回型別為long。
page 28, 倒數第二行“而對於非集合型別,則需要先自定義一個合適的建構函式”中的“非集合型別”應該改為“非聚合型別”。
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”
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'));
page 63, 第二行“第2章”應該改為“第3章”。
page68, 程式碼"int&& var1 = x; //var1"應該改為"int&& var1 = 1; //var1", 這個問題由讀者YZB_OO7指出,在此表示感謝。
68頁“其中,var1的型別是一個左值型別”,應該改為“其中,var1的型別是一個右值型別”,由網友低調指出,再次表示感謝。
69頁:
將輸出如下結果:
...
rvalue : 1
lvaue : 2 此處應該為 lvalue : 2
page74,倒數第二和第三行"_len"和"_data"應該為"m_len"和"m_data"。
page 173,程式碼清單5-2中,both函式寫到Complex類的外面了,應該放裡面。
80頁: FuncWrapper(test0) ; // 沒有返回值, 列印 1 此處應該是列印void
page93,第二行decay的描述不太準確,應該是移除引用和cv,函式或陣列退化為指標。
page99第二段和第三段程式碼中的很多空格被被吃掉了。
page101,"returnt"應該改為"return t"。
page107,109, "structSum"應該為"struct Sum";
page108,第二段程式碼中 "sizeof (First);" 應該為 "sizeof(Last);"。
99頁auto const typedef後少空格
104頁最後和105頁上面,模板的宣告對不上
page110,第二行 "MakeIndexes<1,2,3>::type" 應該為 "MakeIndexes<3>::type"; page121, 註釋 "不帶引數的 lamda" 應該為 "不帶引數的 lambda", 下一行的 "return12" 應為 "return 12"
page122, 最後一段程式碼的錯誤:pMax, pGet 後文寫成了 PMax PMin, hMode 後文寫做 hDLL;
page124, 函式名“ExcecuteFunc”應該為"ExecuteFunc"。
page113, 最下面的Instance函式中缺少了模板引數T。
page126, 第一段程式碼中的 "return0;" 應為 "return 0;",
page127, Then的實現中"[func, &f]"應改為"[func, f]", p
age129, 第8行"emplate"應該為"template",
page136, 第8行"it->first"應該為"v", 最後三行中Integer Max應該為IntegerMax;
133頁的那個測試函式下:
PrintType<function_traits<std::function<int(int)>>::args<0>>(); //這句有問題,在args<0>後面少了type
應該改為:
PrintType<function_traits<std::function<int(int)>>::args<0>::type>();
page137, 第4行MaxType應該為IntegerMax;
page141, 3.3.9 上面的一段是屬於3.3.2lazy的那一節,不應該在這裡。
page 155, 倒數第5行"std::uniq_ptr"應該改為“std::unique_ptr“。
158頁,第三行程式碼"return stared_ptr<S>(this);"型別S應該是A。
page 156, 倒數第三行程式碼newint應該為new int
158頁
shred_ptr<A>GetSelf()
{
return shared_ptr<S>(this); 此處S應為A
}
int main()
{
return0; 此處應為 return 0;
}
page 177,倒數第三行語句unique_lock多寫了一個,應該去掉一個。
page212,第二行,應該是"否則返回false."
page260, foo函式裡,根據結果執行圖10-3和編譯除錯,foo的輸出應該為:
cout << "real foo function:" << a << endl; 而不是書中寫到是real HT function
page337, 第三行缺少一個"]"符號;
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);
}
page355, 第二行"decltype(begin())"應該改為"decltype(boost::make_iterator_range(std::find_if_not(begin(), end(), f), end()))"
page359, TestLinqCpp()裡變數vct應該為v,min和max應該改為Min和Max。
page 406, 多寫了一個AsyncSend函式。