总听见有人说这是个死气沉沉的对象模型。
前天看见一个帖子说“是个语言,只要还活着的,甚至是有一口气的,都能找个理由踩 C++ 一脚,而且不同语言踩 C++ 的理由还各不相同。”
个人使用感觉挺强大的,就是语法语义有点恶心,比如 new T 和 new T()居然是两种语义。
总听见有人说这是个死气沉沉的对象模型。
前天看见一个帖子说“是个语言,只要还活着的,甚至是有一口气的,都能找个理由踩 C++ 一脚,而且不同语言踩 C++ 的理由还各不相同。”
个人使用感觉挺强大的,就是语法语义有点恶心,比如 new T 和 new T()居然是两种语义。
先谈谈优势吧,比如说C++在处理大规模数据和进行高性能计算时非常出色。例如,科学计算、图形处理、游戏引擎等领域常常使用C++来实现对计算资源的最大利用。我举个例子:
// C++示例:计算斐波那契数列
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n-1) + fibonacci(n-2);
}
熟悉的斐波拉契数列其实就是一个很好的对比。这其实也说明了它的另一个优点,就是库丰富,STL提供了各种常用数据结构和算法,Boost库提供了许多通用的功能组件。
其次我认为就是底层访问和操作,这一点我估计很多人,包括我自己在内,都很难认识或者接触到这个东西。毕竟底层是最复杂的东西了。
我在这里也只能简单的举一个例子:
// C++示例:打印操作系统的文件路径分隔符
#include <iostream>
#ifdef _WIN32
const char pathSeparator = '\\';
#else
const char pathSeparator = '/';
#endif
int main() {
std::cout << "Path separator: " << pathSeparator << std::endl;
return 0;
}
当然谈完优点,有必要谈谈缺点。我认为C++是一门复杂的语言,其包含了很多概念、规则和特性。这使得学习和使用C++相对困难,所以复杂性挺高的。
内存安全或者说内存管理我觉得也是一个很大的问题,C++要求开发人员自行管理内存,包括分配、释放和避免内存泄漏等。这增加了代码的复杂性和出错的风险,尤其在大型项目中可能更容易导致错误。
比如我之前写的一个博客(虽然博客内容是c语言,但众所周知c+是c的升华,所以可以将就看看参考):
C语言代码安全审计的实战应用和价值探究
最后一个缺点我觉得就是开发效率,与一些现代编程语言相比,C++在开发速度和生产力方面可能略有不足。某些高级语言提供了更简洁的语法、自动内存管理和更快的迭代开发速度。所以c++比较慢,但是正是因为这样,c++的开发程序员在如今的时代相对于java,html一类的,是很有竞争力的。
当然,语言没有地位的区别,在选择编程语言时,我觉得还是应该根据具体需求和项目特点综合考虑各种因素,并选择最适合的语言,如果一个语言一窍不通或者刚接触,那么就应该放一边。效率才是最重要的。
一般踩C++的论调大概两种, 其一, 学习曲线陡峭, 其二, 不安全.
学习曲线陡峭, 那是真的, 如果你看过C++标准的各种特性列表, 就能明白, 我们大概永远不会完全掌握C++了. 并且, 更无奈的是, 每升级一个标准, 基本就相当于学一到两门新语言, 这个估计C++er应有觉悟.
但这并不重要, 我只听说过基本所有的公司使用C++都会严格限制使用特性, 相当于对语言进行裁切, 只使用其中小部分, 否则大概没有人能保证程序的可维护性.
不安全, 其实是过于灵活的另一种说法, C++相信程序员, 但程序员自己如果过分相信自己, 恐怕就会有问题.
对于内存安全问题, 现代编辑器配合语法检查比如Clang-tidy, 会解决一部分疏忽问题, 保证程序遵循RAII, 则基本可避免内存泄漏, 当然, 对于自信的程序员也不能说的太过.
另外, 一旦掌握C++, 那么学起其他语言应该不会太难, 毕竟大部分都是类C的, 像java, go啥的, 脚本语言基本看看文档就能用了, 至于lisp啥的, 确实不是一个路子, 前几年的Haskell, 近期的rust, 都是火爆的不行不行的, 但能持续多久, 还要看看.
1.1k 阅读
3 回答3k 阅读
其他语言能踩的点应该也就 C/C++编程效率低吧。