《深入应用C++11:代码优化与工程级应用》勘误表

《深入应用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页中的测试结果.

输出结果的第四行与第五行顺序反了.
23.133页的那个测试函数下:
PrintType<function_traits<std::function<int(int)>>::args<0>>();  //这句有问题,在args<0>后面少了type
应该改为:
PrintType<function_traits<std::function<int(int)>>::args<0>::type>();

 24.

69页:
将输出如下结果:
...
rvalue : 1
lvaue : 2  此处应该为 lvalue : 2
 由读者Eric和 RonTang指出,在此表示感谢。
80页:
 FuncWrapper(test0) ;   // 没有返回值, 打印 1        此处应该是打印void
158页
    shred_ptr<A>GetSelf()
    {
        return shared_ptr<S>(this);       此处S应为A
    }
    int main() 
    {
        return0;     此处应为 return 0;
    }

165页
#define GUARD(P) xxx       此处P应当为小写p
 
212页
auto isEven = [](int i){ return i%2 != 0; }     此处掉了}
由读者Eric指出,在此表示感谢。
68页
“其中,var1的类型是一个左值类型”,应该改为“其中,var1的类型是一个右值类型”,由网友低调指出,再次表示感谢。
 
99页auto const typedef后少空格
104页最后和105页上面,模板的声明对不上
由网友忆雪寒支出,在此表示感谢。
 
70页
abi::__cxa_demangle(typeid(TR).name()), nullptr,
nullptr, nullptr),

这里括号没对,应该是

abi::__cxa_demangle(typeid(TR).name() , nullptr,
nullptr, nullptr),

page 78

void forwardValue(T& val)

应该是

void forwardValue(T&& val)

page 50
"它是一个特殊的匿名非nunion类型"应为"它是一个特殊的匿名非union类型"

感谢chanchann指出

page 189

std::time_t next = system_clock::to_time_t(now - hours(24));  减号应该为+号。

 

page 102

std::enable_if(!std::is_same<T, string>::value..., 应该去掉!.

刚写chanchann指出。

 

p88 的 integral_constant 实现中

static cons T value = v;

这里的cons应该是constexpr

p97的 最上面

return f(r);

应该是

return f(arg);

感谢Chanchann指出问题。

也欢迎更多的读者来指出问题和提出宝贵意见。

posted on 2015-06-08 22:43  qicosmos(江南)  阅读(7260)  评论(36编辑  收藏  举报

导航