天天看點

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

繼續閱讀