现代 C++:现代 C++ 简介 什么是现代 C++?现代 C++ 系列

2025-06-04

现代 C++:简介

什么是现代 C++?

现代 C++ 系列

大多数人认为他们了解生产级使用的 C++,因为他们大学/学院的教学大纲里有教 C++。但他们大多不知道自己学的是哪种标准的 C++。他们学的是 C++ 89,也就是CFront 2.0。大学里的学生被要求使用Turbo C++作为 IDE 来学习 C++,因为它在当时是,或者曾经是,一个很棒的 IDE。由于学术大纲的更新需要很长时间,而且人们并不知道它已经过时,所以大多数人倾向于学习旧的编码风格和过时的功能。

什么是现代 C++?

现代 C++ 代表基于 C++11、C++14、C++17、C++20 及未来版本的 C++。

C++11 带来了一场革命。这场革命在 C++14 中得以延续,并将在 C++17 中演变成一场演进。C++ 特性的时间线概述可以清晰地阐明我的观点。

现代 C++ 不仅增强了 C++ 本身的易用性,auto关键字语义的修改也让其在操作极其复杂的模板类型时更有信心。同时,语言在运行时也做了大量的增强,Lambda 表达式的出现使得 C++ 拥有了“匿名函数”的“闭包”特性,这在现代编程语言(例如 Python/Swift/...)中几乎已经司空见惯,而rvalue引用的出现则解决了 C++ 长期以来被诟病的临时对象效率问题。

已弃用的功能

  • 字符串字面常量不再允许赋值给 a char *。如果需要char *用字符串字面常量赋值并初始化 a ,则应使用const char *auto
char *str = "hello world!"; // A deprecation warning will appear
Enter fullscreen mode Exit fullscreen mode
  • C++98 exception descriptionunexpected_handlerset_unexpected()和其他相关功能已弃用,应使用noexcept

  • auto_ptr已被弃用并且unique_ptr应该被使用。

  • register关键字已被弃用,仍然可以使用,但不再具有任何实际意义。

  • bool无法再增加

  • 如果某个类具有destructor,则它为其生成复制构造函数和复制赋值运算符的属性将被弃用。

  • 不推荐使用 C 语言风格的类型转换(即在变量前使用 (convert_type)),而应使用static_castreinterpret_cast、进行类型转换。const_cast

  • 特别是,一些可以使用的 C 标准库现在在最新的 C++ 标准中已经被弃用,例如<ccomplex><cstdalign><cstdbool><ctgmath>

  • 还有很多,我记不清了。

学习现代 C++ 的资源

我发表的帖子列表

Github

我的文章中使用的所有代码都可以在Delta456/modern-cpp-series上找到。


文章来源:https://dev.to/delta456/modern-c-an-introduction-36kg
PREV
Node.JS 和 Express 中的安全性:最低限度 - 第 1 部分。我们将在本文中介绍服务器端 JS 注入使用严格的 Helmet 更改默认错误页面正确的会话管理就这些了(目前……)
NEXT
在 TypeScript 中启动项目的最小时间