c++学习书籍

发布时间 2023-12-19 09:42:13作者: redrobot

 

 

C++ Primer 第五版 第四版 对比 差异

C++ Primer是一本经典的C++编程教材,它的第五版与第四版有哪些不同点呢?

首先,C++ Primer第五版引入了C++11标准,讲解了C++11的新特性,例如auto类型推导、lambda表达式、右值引用、智能指针等等。这些新特性有助于提高C++程序的性能和简化代码实现,对于想要深入了解C++的开发者来说是非常有用的。

其次,C++ Primer第五版在章节安排上进行了重新调整,更好地优化了教材结构。具体来说,第五版对C++模板进行了更加深入的讲解,将其从原先的一章节拆分成了两章节,方便学生更好地掌握模板的内容。此外,第五版还新增了“容器库”和“算法库”的章节,让开发者更加深入了解C++ STL。

另外,C++ Primer第五版还添加了一些新的例子和习题,帮助读者更好地理解和掌握C++语言的特性和应用。同时,第五版的代码更加规范和简洁,容易读懂和理解,有助于降低学习曲线,从而更快地掌握C++编程技能。

总之,C++ Primer第五版与第四版相比,更加适应现代C++编程,内容更加深入、系统化、实用化。如果你想要深入学习C++语言,那么C++ Primer第五版无疑是一本非常值得推荐的书籍。

 

 

作者:momo
链接:https://www.zhihu.com/question/355400393/answer/3245544440
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

C++98:
引入了以下新的库特性:
RTTI (运行时类型信息),包括dynamic_cast和typeid
类型转换运算符,如static_cast、dynamic_cast、const_cast和reinterpret_cast
mutable关键字
bool类型
模板实例化
成员模板
export关键字
标准库增加了一些新的内容,包括:本地化支持(locales)、bitset、valarray、auto_ptr、模板化的字符串、I/O流和复数1


C++03:
这是一个主要针对实现者的错误修复版本,以确保更大的一致性和可移植性。这个修订版解决了92个核心语言缺陷报告,125个库缺陷报告,并引入了一个新的语言特性:值初始化2


C++11:
引入了以下新的库特性:
std::tuple
std::any
std::optional
std::variant
std::string_view
std::invoke
std::apply
std::filesystem
std::byte
并集映射和集合
并行算法
std::sample
std::clamp
std::reduce
前缀求和算法
最大公约数和最小公倍数
std::not_fn
字符串转换为/从数字


C++14:
引入了以下新的库特性:
标准库类型的用户定义字面量
编译时整数序列
std::make_unique


C++17:
引入了以下新的库特性:
概念库
同步缓冲输出流
std::span
比特操作
数学常数
std::is_constant_evaluated
支持数组的std::make_shared
字符串上的开始与结束检查
检查关联容器是否有元素
std::bit_cast


C++20:
引入了以下新的库特性:
概念库
同步缓冲输出流
std::span
比特操作
数学常数
std::is_constant_evaluated
支持数组的std::make_shared
字符串上的开始与结束检查
检查关联容器是否有元素
std::bit_cast


C++23:
标准引入了以下新特性:
模块“std”:这是一个标准库模块,预计将改善编译。
if consteval:这是一个关于即时函数(immediate function)的特性,即consteval函数
Deducing this(P0847):这是C++23中最主要的特性之一。msvc在去年3月份就已支持该特性,可以在v19.32之后的版本使用。
std::expected(P0323):该特性用于解决错误处理的问题,增加了一个新的头文件 <expected>。
Formatted Output(P2093):该提案就是 std::print()。
import std(P2465)
out_ptr(P1132r8)
auto (x) decay copy(P0849)
简化隐式移动
修复范围for循环中的临时变量
多维和静态运算符[]
Unicode改进
静态constexpr在constexpr函数中

 

 

-std=c++17

 

作者:代码丸子
链接:https://www.zhihu.com/question/20410487/answer/1707839628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐几本经典书籍

C++ Primer 第五版

C++语法太过繁杂,很多语法特性一辈子也用不上。对于初学者来说,学完前7章就能写简单的程序。

《大话数据结构》

这实在是一本对新手非常友好的书,暂时先看完前5章就够了。此时应该多做一些练习,可以是简单的小软件或小游戏。

《C++ Primer 第五版》

没错还是这本书,之前7章学了基础语法。现在继续学习8~12章,涵盖了标准库常用组件的基本用法。想完整学习标准库的同学可以在未来深入阅读《C++标准程序库:自修教程与参考手册》。

进阶学习:

此时可以选择性地把《C++ Primer 第五版》剩下的部分看完,第15章面向对象是重要内容,需要认真研究。

此时也可以把《大话数据结构》看完,或换一本正经的深入讲解算法的书,比如《算法导论》。

《Effective C++》、《C++编程规范

C++给了程序员过高的自由度,这反而不是一件好事,这两本书告诉你使用C++哪些做法是正确的,哪些是错误的,C++进阶必读。还有一本补充读物《More Effective C++》可选读。

其次,明确初学者在学习中的一个误区:学理论记不住?

就因为只是在看书。

C++是一门很考验基本功的编程语言,没有所谓的速成门路

很多人看了网上的一些教程,就跟着去刷题,LeetCode、剑指offer……来者不拒。我很理解大家的这种焦虑,因为我也是这么过来的。但刷题的目的是为了更好地巩固和运用基础,现在却本末倒置了,这其实是一种错误的学习方法。

为此,胡光老师会在训练营里指出正确的学习路径,让大家认识到C++底层基础的重要性。同时,这个训练营也能够帮助大家定位自己的学习阶段,明确接下来的进阶方向。

如果语法知识学得差不多了,如何顺利过渡到实践开发层面?

这应该是很多C++初学者的苦恼。

一是C++的开源项目往往大而全,对初级阶段的人来说,以这些项目作为参考,无疑是杀鸡用牛刀。二,是C++的语法规则相对比较复杂,哼哧哼哧搞完一个项目,却处处是bug,最要命的是对此你还一无所知。

工程开发要遵循哪些规范?遵循它们的目的是什么?出错会造成哪些影响?对此,你最好要有一定的了解。在这个训练营当中,老师手把手教你,学习正确的编程范式,在短时间内最大限度地提升工程开发能力。

想进大厂心里又没底,该如何系统地准备面试?

面试考察的两大重点是代码能力和算法思维。要提高代码能力,没有捷径,唯有多练、多看。而算法思维,在有效的指导下,可以得到快速提升

 
 
作者:匿名用户
链接:https://www.zhihu.com/question/36753768/answer/68861394
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不带 plus 的最新版本。

学 C++,就要学习现代的,多范式的,重视 STL 容器与算法应用的,有良好代码风格和口味的 C++。

不能学陈腐的,半调子的,不重视利用库的(对已经被诟病标准库太少的 C++ 这种语言),代码风格混乱的东西。

C++ Primer Plus 就是后面一种。整本书充斥着定长数组见不到 std::vector 的使用,充斥着 char[] 却见不到 std::string 的使用,看完大半本书还不知道怎么给整数排序、没见过迭代器,一本号称涵盖了 C++11 特性的书把 auto_ptr 和 unique_ptr 都说不清楚。这种书不读也罢。

Accelerated C++ 在十五年前(2000 年)出版,写得也比 C++ Primer Plus 要现代精到得多。要快速学习 C++98 标准下的现代 C++ 风格,Accelerated C++ 就够了。

而要在 C++11 标准下学现代 C++ 风格,BS 的 Programming: Principles and Practice Using C++ 第二版就是这类入门书了。

在近十年,C++ 的重要作者的教材,如《Accelerated C++》、《Programming: Principles and Practice Using C++》,又如第 4 版以后的《C++ Primer》、第 3 版以后的《TC++PL》,都是用这样的现代观点写的。你要读这样的现代的观点的书

 

参考:

https://21xrx.com/Articles/read_article/201999

https://www.zhihu.com/question/355400393

https://www.zhihu.com/question/20410487

https://www.zhihu.com/question/36753768