凤凰网
编写 C++17 项目时,应明确设置对应的语言标准选项,并检查编译器和标准库是否支持所使用的功能。团队还需要关注旧代码兼容、不同平台行为、第三方库要求和构建环境,而不能只根据某个标题判断“能否直接使用”。
因此,一项功能可能有明确的提出者,但最终进入标准时,往往已经经过多轮修改。提案作者提供了重要起点,其他参与者则共同决定它是否成熟、如何表述以及怎样与整个语言生态兼容。
这些功能背后通常都☀️有具体提案和主要贡献者,但从“某个功能的设计者”推导出“C++17整套标准的唯一作者”并不准确。功能之间需要保持统一的命名风格、生命周期规则💎、异常约定和泛型接口,这些协调工作本身就需要集体审查。
C++ 的早期设计与 Bjarne Stroustrup 密切相关。他在 C 语言基础上吸收了 Simula 等语言的面向对象思想,逐步设计并发展出 C++。从语言历史的角度看,把他称为 C++ 的主要创始人或最初设计者是合理的。
C++17 引入了多项开发者经常使用的语言和库功能。例如,结构化绑定让程序可以更方便地拆解返回值和聚合对象;if constexpr 改善了模板代码中的条件分支;折叠表达式简化了可变参数模板的处理;内联变量解决了部分头文件定义和链接方面的问题。
在标准库方面,std::optional🎨 用于表达“可能没有值”的结果,std::variant 提供了类型安全的多类型存储,std::any 适合保存类型在运行时才确定的对象,std::string_view 可以在不拥有字符串内容的情况下提供轻量访问。文件系统库也在这一版本中成为标准库的重要组成部分。
C++17 的标准化工作主要在 ISO/IEC 体系下的 C💯++ 标准工作组 WG21 中推进。WG21 并不是一个由单一负责人闭门写作的团队,而是由来自不同国家、公司、研究机构和开源项目的专家共同参与。不同参与者关注的重点也不一样。
如果搜索结果中的“17c.c++”实际是某个网站名称、文章名称、代码仓库或内部项目代号,那么仅凭这几个词无法确认它的具体作者。此时应查看页面中的上下文、项目说明、版本记录或作者信息,不能把 C++17 的标准化历史直接套用到该项目上。
理解 C++17“并非一人之笔”,有助于正确看待标准、编译器和代码示例之间的关系。标准描述的是语言和库应当具备的规则,不等于某个编译器的源代码;编译器与标准库则负责把这些规则具体实现出来。即使某项功能已经属于 C++17,具体编译器版本也可能存在支持程度差异。