只允许c++ 11的编码特性和风格

Allow ONLY c++ 11 coding features and style

本文关键字:风格 编码 c++      更新时间:2023-10-16

是否有一种方法来强制使用现代c++ 11功能从编译器?

我们必须开始一个新的项目,并继续使用c++,这将使我们受益于我们现有的工具和库的使用,但目前伤害我们的是对C风格编码的滥用,原始指针,C风格向量和所有危险的C特性,这些特性非常容易出错或产生难以跟踪的错误,你知道我的意思。

我读了一篇关于c++今天(c++11及以后)不好的地方的笔记,是c++的过去和在不必要的时候滥用低级/旧特性。

我真的希望从编译器或其他工具强制使用c++ 11功能,如智能指针,容器,引用参数,c++标准库和非c库等。

非常感谢。

EDIT: 我认为没有必要澄清代码审查的使用。我只是问是否有工具/机制过滤创建功能,或强制执行现代更安全的功能/编码实践。所有的损失我们以后会处理或解决。非常感谢!

您可能想看看clang- modernide,它可以帮助您实现您正在寻找的一些功能。此外,运行静态分析来帮助捕获不良实践可以帮助识别代码库中特别需要关注/现代化的区域。有许多这样的工具与clang相关联,如果您使用Visual Studio, MSVC也有自己的静态分析。

确保c++11特性(如auto变量声明、使用lambda定义、基于范围的for循环等)比旧技术更优先使用的唯一方法是基于人的代码审查。

不推荐的东西的使用,比如std::auto_ptr的使用可能已经通过警告进行了分类。
但是,如果没有第二对经验丰富的眼睛来检查代码,执行新的方式样式可能会变得困难。

我可以考虑使用一个适当的静态代码分析工具来检测旧的风格模式,并提出c++11的标准方法来做这件事,但这是一个太宽泛的话题,并且取决于所使用的静态分析工具。

冒着被否决的风险。

所以你或者你的c++编程"专家",想要禁止某些实践。因为你知道他们是坏的。

就是使用原始指针。遗憾的是,有些c++程序员不仅经常使用指针,而且认为它们是一种好东西。像Herb Sutter这样的人,他在最近的一次谈话中(我想是CppCon)就是这么说的。

你提到的另一个实践是使用C风格向量。这不是问题,因为C没有向量。

你只提到了这两个。但您确实谈到了禁止导致错误的特性。这很容易实现。而不是发给你的程序员电脑。发布他们蚀刻草图。

除此之外,我想说你的公司应该雇佣真正的专家,而不是读过Herb Schildt书的人。

PS:我试图记住你的帖子闻起来像什么,现在我想起来了。这就像一个设计文档审查,一个人花了一半的时间争论设计文档中的拼写错误。