现代C++基本介绍

1、C++相关组织和网站

ISO(International Organization for Standardization)
ISO是国际标准化组织,负责当今世界上多数领域(包括军工、石油、船舶等垄断行业)的标准化活动,通过2856个技术结构(含技术委员会611个、工作组2022个、特别工作组38个)开展技术活动。
C++标准委员会(ISO/IEC JTC1/SC22/WG2112)
C++标准也是由ISO负责的。C++标准委员会的正式名称是 ISO/IEC JTC1/SC22/WG2112,它是 ISO/IEC JTC1/SC22 下属的一个工作组,专门负责制定和维护C++语言标准。它成立于1990-91年,由来自不同国家的专家组成。它每年会举行多次会议,讨论和审查关于C++标准的提案和草案。C++标准委员会没有一个单独的官方网站。
isocpp
一个用于推广和支持C++标准化工作的网站,它由一个非营利性组织(Standard C++ Foundation)提供。它包含了一些关于C++标准的新闻、状态、讨论、文章、书籍、事件、培训和产品的信息。它也有一些链接到其他有关C++标准的网站,比如 C++参考文档、在线编译器等。它不是一个官方的网站,但是它与C++标准委员会有密切的合作关系。
open-std
一个用于存放一些开放标准的网站,它由丹麦技术大学(DTU)赞助。它包含了一些ISO/IEC JTC1下属的子委员会和工作组的网页,比如SC2、SC22、SC34等。其中,SC22/WG21就是C++标准委员会的网页,你可以在那里找到关于C++标准的一些信息,比如最新的草案、 已发布的标准、问题列表等。
cppreference
C++参考文档 网站,提供了C和C++语言的参考资料。它包含了语言的基本概念、关键字、预处理器、表达式、声明、初始化、函数、语句、类、重载、模板和异常等内容,以及标准库的头文件、命名要求、特性测试宏和各种库函数和类。它还提供了不同版本的C和C++标准(如C++98, C++11, C++20等)的 编译器支持情况。
cplusplus
关于C++语言的网站。提供了C++语言的 教程,从基础知识到C++11引入的新特性都有涵盖。而且有配套示例程序,在学习完后可以立刻着手练习。此外,该网站还提供标准C++库的 参考资料

2、什么是现代C++

什么是现代C++(Modern C++)?
所谓现代C++,就是指 C++11 及之后的 C++(C++ 11/14/17/20/23/…),大量引入的新的语言特性和库功能使得C++感觉像一门新的语言。
  • 历代C++标准发布时间:

    • C++98:1998年09月01日
    • C++03:2003年10月15日
    • C++11:2011年09月01日
    • C++14:2014年08月18日
    • C++17:2017年12月01日
    • C++20:2020年12月18日
    • C++23:制定中,预计2023年底发布
    • C++98是C++标准的第一个版本,其定义了语言的基本构造、STL和标准库。而C++03只是在C++98的基础上修正了一些错误和不一致,并没有引入什么新的语言特性或库功能,所以有时候可能会将它们看作同一个C++标准(称为"C++98/03")。
    • C++11是一次非常大的升级,引入了很多新的语言特性和库功能,使得C++感觉像一门新的语言。这些特性需要经过长期的设计、讨论、测试和反馈,才能达到标准委员会的要求。而且,由于C++是一门非常复杂和灵活的语言,要保证与之前版本的兼容性和一致性也是一个巨大的挑战。所以,C++03之后时隔八年才发布新的C++11标准。

3、C++标准之间的关系

  • C++标准之间的关系是,每一个新的标准都是在前一个标准的基础上进行修改和扩展的。也就是说,C++20包含了C++17以及之前所有C++标准的内容,但是也可能有一些变化和废弃的特性。

  • 也就是说,在C++20中,我们仍然可以找到最简单、最基本的标准,比如"int、char、bool"等基本数据类型之类的标准。

  • 也就是说,C++11的新特性,到了C++14中就算不上新特性了(成为已有特性);C++14的新特性,到了C++17中就算不上新特性了(成为已有特性);往后亦是如此。

  • 当编译器不支持C++新特性而去使用该特性时会导致编译错误,所以我们有必要了解自己的C++编译器对C++标准和特性的支持。


4、相关链接


5、后记

  • 学习现代C++,我们不仅需要在掌握基本C++入门的基础上继续学习历代C++标准的新特性,还需要了解现代C++的编程范式和风格,比如:

    1. 优先使用 STL(标准模板库)中的容器和算法,而不是裸指针和手动循环。
    2. 优先使用智能指针(如 unique_ptrshared_ptr 等)来管理动态分配的资源,而不是手动调用 new 和 delete。
    3. 优先使用 auto 关键字来推导变量的类型,而不是显式地指定类型。
    4. 优先使用 lambda 表达式来定义简单的函数对象,而不是传统的函数指针或仿函数类。
    5. 优先使用 constexpr 关键字来定义编译期常量和函数,而不是运行期常量和函数。
    6. 优先使用模板元编程(template metaprogramming)或概念(concepts)来实现通用编程(generic programming),而不是宏或继承。
  • 🔔 在继续学习现代C++之前,您需要确保您已具备C++基础;您可以参考笔者的面向对象程序设计(基础)专栏了解C++基础的相关内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值