总结
如果有不错的 C++ 开发人员和编译器,请坚持使用 C++。
如果没有,那么您将不得不平衡学习曲线、项目复杂性(语言适应性会降低这点)和可用编译器。
学习曲线
在 C 语言中,该语言的学习曲线更容易:您的开发人员将更容易掌握该语言的基本特性...... C++ 是一种更大的语言,包含 C 子集和模板子集,并且对象子集等,每个子集都与前一个完全不同。
事实上,使用 C++ 编写非常低效的代码很容易。不是因为“语言很慢”,而是因为开发人员有时会以错误的方式对其进行编码(通常是通过忽略 C++ 语言的非 C 部分,如引用等)。这是“学习曲线”问题的一部分。
但是一旦“学习曲线”结束了,我们就可以看看语言特征了……
语言适应性
C 很直率。要么使用 C 的内置结构,这很容易(例如,添加两个整数......),要么不使用,它容易出错,并且可能效率低下。
C++ 可以轻松避免资源泄漏、缓冲区溢出、内存或堆栈损坏。在 C 语言中,这些情况几乎会发生在每一行代码中。
通过内联和封装,C++ 可以轻松高效且安全地处理任何类型(即用户定义的类型)。借助模板和 OOP,C++ 可以非常轻松地使用附加功能扩展某些类型。
当然,所有这些都假设 C 和 C++ 将具有同样高效的编译器...
编译器
C++ 对编译器做了很多假设。通过阅读 STL 实现,您会看到很多明显无用的函数调用,并且会怀疑所有这些“花哨”的代价。事实上,编译器会将它们内联,使生成的二进制文件比您想象的要小。
但如果你的编译器不能做到这一点,那么 C++ 可能不是一个好主意。
结论
1 - 编写C++代码的开发时间比C长吗?
这取决于项目的规模/复杂性,以及开发人员对所选语言的熟悉程度。 如果您有 C++ 开发人员,请坚持使用 C++。
2 - C++ 代码的维护成本比 C 便宜吗? (我知道代码总是会有变化的)
同样,这取决于项目的规模/复杂性。它越复杂,您需要的架构就越多,因此,您需要的语言支持的功能就越多,然后使用 C++。
3 - 在 C++ 中针对 C 编写代码是否容易? (描述代码如何工作的文档)
我假设您是在谈论代码清晰性(即不是类似 Doxygen 的文档,它对 C 和 C++ 的工作方式相同)。
这取决于您使用了多少功能。例如,与 C 中的等效代码相比,使用 C++ 字符串是很自然的。事实上,在 C++ 中使用复杂结构比在 C 中要容易得多...
MyMatrix A, B, C ; // My Matrix is an user-defined object
// etc.
C = A * B ; // If you believe this is anything but a
// multiplication of two matrices, then
// you need serious medical help.
无需记录此代码。每个人都知道什么是矩阵,什么是乘法。 C 中的相同代码会更加冗长...
但是,C++ 也可能非常冗长。如果没有 foreach(如 Boost.FOREACH),编写一个循环来迭代 STL 容器中的每个项目可能会非常令人印象深刻:
for(std::map<int, std::string>::iterator it = myMap.begin(), itEnd = myMap.end() ;
it != itEnd ;
++it)
{
// Do something quite complicated...
}
某些 C++ 语言特性在来自过程语言时甚至是非自然的,并且将成为学习曲线的一部分。如果开发人员没有做好准备,此类代码的编译器错误导致的消息可能会破坏他们的理智。
:-)
所以它再次取决于您的开发人员对 C++ 的了解。
我个人的结论?
我最初是一名 C 开发人员。在学习 C++ 后,我发现这门语言对我的使用来说太复杂了,但我仍然认为 C++ 的一些特性在 C 中会很酷……从那时起,经过多年的经验,我的观点完全改变了。我再也不会用 C 编写代码了。
对我来说,没有意义:这就像限制自己骑自行车移动,而我可以选择骑自行车、汽车、飞机,甚至是我的腿。
只要你的 C++ 编译器没问题,并且你的开发人员知道 C++(或想学习 C++),C++ 就可以做 C 能做的所有事情(通常更好),甚至更多(记住,这是个人观点)。
Post Scriptum:C++ 是否用于关键应用程序?
显然,C++ 用于 F-35(“F-22 lite”)。以下文档很有趣,因为它展示了哪些 C++ 功能真正是零成本(因此具有积极影响),以及哪些 C++ 功能可能对软件产生负面影响:
http://www.stroustrup.com/JSF-AV-rules.pdf
如果 C++ 对this plane 来说足够好,那么我猜 C++ 对很多不那么雄心勃勃的项目也有好处...
:-)