有没有办法强制使用编译器中的现代c ++ 11功能?
我们必须开始一个新项目并且继续使用C ++将使我们从现有的工具和库中受益,但是目前正在伤害我们的是C样式编码的滥用,原始指针,C风格向量和所有危险C功能如此容易出错或产生很难跟踪的错误,你知道我的意思。
我读了一篇关于今天C ++中有什么不好的说明(c ++ 11及更高版本)是c ++过去以及在没有必要时滥用低级/旧功能。
我真的想从编译器或其他工具强制使用c ++ 11功能,如智能指针,容器,参考参数,c ++标准库而不是C库等。
非常感谢。
编辑: 我认为没有必要澄清代码审核的使用。等等我只是询问是否有工具/机制来过滤创建功能,或强制执行现代更安全的功能/编码实践。我们将管理或稍后解决的所有损失结束。非常感谢你!
答案 0 :(得分:4)
您可能需要查看clang-modernize,它可以帮助您找到所需的一些内容。此外,运行静态分析以帮助捕获不良实践有助于确定代码库中的某些区域,特别需要一些关注/现代化。有许多与clang相关的工具,如果您使用Visual Studio,MSVC也有自己的static analysis。
答案 1 :(得分:1)
确保c ++ 11功能(如auto
变量声明,使用lambda定义,基于循环的范围等)的唯一方法是使用旧技术,而不是基于人工的代码审查。
已弃用的内容的使用,例如std::auto_ptr
的使用,可能已经通过警告进行整理
但是,如果没有第二对经验丰富的眼睛看着代码,强制执行新的方式可能会变得很难。
我可以考虑使用适当的静态代码分析工具,检测旧样式模式并提出c ++ 11标准方法来实现它,但这是一个过于宽泛的主题,并且取决于所使用的静态分析工具。
答案 2 :(得分:-1)
冒着被遗忘的风险。
所以你或你的C ++编程“专家”想要禁止某些做法。 因为你知道他们不好。
其中一种做法是使用原始指针。遗憾的是,有些C ++程序员不仅经常使用指针,而且认为使用它们是一件好事。像Herb Sutter这样的人,在最近的一次谈话中(我认为是CppCon)就是这么说的。
您提到的另一种做法是使用C样式向量。没问题,因为C没有载体。
这些是你提到的唯一两个。但是你确实谈到禁止导致错误的功能。这很容易实现。而不是发给你的程序员电脑。发布它们蚀刻 - 草图。
除此之外,我会说你的公司应该聘请真正的专家,而不是那些阅读Herb Schildt书籍的人。
PS:我正在努力记住你的帖子闻起来的味道,现在我记得了。它闻起来就像其中一个设计文档审查,其中一个人花了一半的时间来争论设计文档中的拼写错误。