1. 程式人生 > >《深入應用C++11:程式碼優化與工程級應用》勘誤表

《深入應用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函式。