引言:为什么有些C++书籍能教会你,而另一些却会毁了你?
\n如果你曾经寻找过从哪本书开始学习C++,那么你很可能遇到过Stack Overflow上的传奇帖子:"The Definitive C++ Book Guide and List"。这个帖子获得了数千个赞和数百万次浏览。为什么?因为C++的世界对新手很残酷。你可以从出色的《C++ Primer》开始,也可以从Stroustrup过时的《C++程序设计语言》(第一版)开始,后者会让你想永远放弃编程。
\n在本文中,我们将分析新手(以及不仅仅是新手)在选择C++文献时犯的主要错误,并展示如何避免它们。我们不仅会提供一个书籍列表——我们还会解释为什么有些书有用,而另一些则危险。让我们开始吧!
\n\n错误#1:忽视现代C++标准
\n最常见的问题是拿一本为C++98或C++03编写的书,却试图用它来学习C++11/14/17/20。这就像用19世纪的教科书学英语一样。是的,你会学到单词,但说起话来会像莎士比亚——优美,但现代人听不懂。
\n在现代C++(从C++11开始)中,出现了auto、智能指针、lambda表达式、nullptr、std::move、std::shared_ptr等等。如果你把new和delete作为内存管理的主要方式——那你学错了。
如何避免?
\n// 糟糕(过时的C++98风格)\nint* p = new int(5);\ndelete p;\n\n// 良好(现代C++11及更新版本)\nauto p = std::make_unique<int>(5);\n// 智能指针会在离开作用域时自动删除对象。\n\n建议:寻找明确标注标准的书籍:"C++11"、"C++14"、"C++17"、"C++20"。最佳选择:Lippman的"C++ Primer"(第5版)或Scott Meyers的"Effective Modern C++"。
\n\n错误#2:选择“唯一一本书”而不是系统
\n许多人认为:“读完一本厚书,我就成了大师。”C++不是Python。它是一种需要系统方法的语言。一本书提供基础,第二本提供高级技术,第三本提供设计模式。
\n例如:"C++ Primer"很好地教授了基础知识,但几乎没有涉及多线程。"Effective Modern C++"教授C++11/14的细节,但假设你已经知道语法。Stroustrup的"The C++ Programming Language"是一本参考书,而不是给新手的教程。
\n\n如何避免?
\n制定一个学习路线:
\n- \n
- 入门:"C++ Primer"(Lippman,第5版)——最好的入门书籍。 \n
- 高级水平:"Effective Modern C++"(Meyers)——理解C++11/14的必读书。 \n
- 模板和元编程:"C++ Templates: The Complete Guide"(Vandevoorde, Josuttis)。 \n
- 实践:"A Tour of C++"(Stroustrup)——语言特性的简要概述。 \n
错误#3:阅读永远不会编译的代码
\n有些书(尤其是旧书)包含的示例在现代编译器上无法运行。或者更糟的是,它们能运行,但教授的是不良实践。例如,使用#include <iostream.h>(过时的头文件)而不是#include <iostream>。
// 过去是这样(C++98及更早)\n#include <iostream.h>\nint main() {\n cout << "Hello" << endl;\n return 0;\n}\n\n// 现在正确的方式\n#include <iostream>\nint main() {\n std::cout << "Hello" << std::endl;\n return 0;\n}\n\n区别不仅在于语法。<iostream.h>不是标准头文件,在现代编译器中可能不存在。使用它的书籍是一个危险信号。