C ++ 回到今天
在 1999 年我去大学之前学习的时候, C ++ 就是狂野的西部. 令人困惑的语法, 重度类 c 指针使用, 并且很难调试. 小编 c++ 学习群 825414254 获取 c++ 一整套系统性的学习资料还有数十套 PDF
如果你足够幸运地得到你的应用程序编译, 你会发现调试和测试是一场噩梦. API 和平台之间几乎没有一致性. 哦, 我提到我们刚刚有 56K 拨号调制解调器, 所以没有谷歌或 Stack Overflow 可以让你即时访问你需要学习的所有帮助吗?
干预年
Java 从 1999 年开始占据主导地位. 这是整整一代英国计算机科学家学到的东西 - 从命令行工具创建到 UI 代码, 屏幕共享应用程序, 再到使用 EJB 和 Servlet 的企业应用程序开发 (这些都是非常详细的文档记录) 当时我的 MarkLogic 同事 Jason Hunter!).
Java 在语法上比 C ++ 简单得多. 它有自己的内存管理并通过指针而不是值传递. 它有一个跨平台的 API, 可以满足您所需的一切. 后来, 通过 Java Community Process 添加了用纯 Java 编写的扩展 - 从而跨平台编写.
慢慢地, 随着时间的推移 C ++ - isms 悄悄回来. 类型化的集合回应了 C ++ 标准模板库(STL). 程序员需要更多的力量. 一些异教徒甚至希望他们具有 C ++ 的强大功能和性能以及 Java 的简单性.
为了公平对待 Sun Microsystems, 现在是 Oracle, 他们在应对这方面做得非常好. Java 一直坚持企业应用程序堆栈, 从未用于系统编程(无论如何都在移动电话之外), 浏览器中的 applet 因安全问题而死亡, 而 UI 中的 Java 现在几乎与基于 Eclipse 的 IDE 同义, 而不是纯 Java Swing.
同时, 对快速, 机器代码编译, 轻量级语言 (如 C ++) 的需求经受住了时间的考验.
现代 C ++
我必须承认, 虽然我知道 20 多种计算机语言但回归 C ++ 的想法让我充满了恐惧. 更糟糕的是, 我正在开发的项目也需要 API 的 C 包装器! 哎哟!
与此同时, C ++ 已经更加有效地标准化并且不断发展.
标准组织认可了开发人员对 Java 的喜爱. 各种低级操作系统安全问题意味着对语言创新的需求增加, 以实现安全性并防止由于误用语言功能而导致的错误.
Smart Pointers 绝对是一个神奇的天赐之物. 当 std :: unique_ptr <SomeType > 对象作为变量的对象超出范围并被销毁时, 它将删除其包装指针所使用的内存. 非常类似于 Java, 但没有垃圾收集的延迟.
std :: shared_ptr <SomeType > 对象将此扩展到多个对象可能具有对指针的引用的位置. 非常像 Java 的参考.
没有更多悬挂指针 - 正确使用时.
具有一致性的迭代器以及使用 STL 模式定义自己的迭代器是一个值得欢迎的补充. 更好的是, 可以针对集合类的成员运行独立于集合的聪明算法. 这些库的数量不断增加.
移动语义, 我仍然试图让我的头脑 - 但它消除了旧的 C ++ 编程习语的许多对象创建 - 复制 - 破坏开销. 这真的让代码飞了起来 - 但需要一点点让你的头脑! 特别是通用引用 - 即移动构造函数的方法: MyClass :: MyClass(const SomeType && other);
甚至还有 std :: function <ReturnType(CallParamType1,CallParamType2,...)>函数指针包装器.
Boost 库的工作有效地为语言特性创建了新的思想, 最流行和最有用的思想成为下一个 ISO C ++ 标准的一部分.
我们在 2011 年对 C ++ 11 进行了重大修订. 这引入了上述许多语言功能, 并对其进行了标准化. STL 现在也是语言的一部分, 并且普遍存在. STL 并不觉得这种语言被黑客攻击, 而是它的核心部分.
最佳实践也已形成并成为硬性规则. Scott Meyers 的有效现代 C ++ http://amzn.to/2btFky7 (像语言大师这样的 Jason Hunter!)是一本书的重写, 是我个人的 C ++ 习语和最佳实践.
此外, Martin Reddy 的 API Design for C ++ http://amzn.to/2bs8EGt 必须是关于 API 设计主题的最佳书籍 - 对于任何语言 - 我都读过. 我强烈建议任何计算机科学家, 特别是那些即将开始大学...(你知道你是谁!)
通过实际例子, 这些难以学习的课程非常容易理解和学习. 这些示例清晰简洁 - 它们不会尝试教您 C ++, 而是更正确地使用它. 因此, 任何有经验的程序员都可以很容易地使用它来获取或重新学习 C ++, 就像我一样.
感谢这些经验和这些书籍, 我学到了创建自己的 C ++ API 所需的最佳实践. 这是 MarkLogic 的 MLCPlusPlus 客户端 API 项目 https://github.com/adamfowleruk/mlcplusplus/ . 我还没有完全在那里, 但他们已经允许我应用现代 C ++ 11 功能并创建一个非常高性能的 API.
我通过继承最佳实践, 迭代器模式, 异步任务执行和同步, 简单的 API 设计, 甚至使用 SWIG 的跨语言绑定, 应用了基本结构和类布局的课程!
我现在不会害怕任何需要 C ++ 的项目...... 当你意识到我上个月一直在努力的事情时, 这是最好的...... 但是直到 2017 年才能讨论这个问题!
结论
学习 C ++. 现在. 做它!!!
现在这是一种绝对的快乐. 我这样做比 Java 更有趣. Waaaaaaaay 比 JavaScript 更有趣.
我敢说, 比 XQuery 更有趣. 我其实非常喜欢 XQuery!
不要误解我有几天我想用棍子击败编译器死亡, 但这通常是因为我太热情并且在尝试应用之前没有完全理解应用的最佳实践. 从那时起.
C ++ 现在是一种很好用的语言. 与 90 年代不同的是, 非常可预测, 一致, 并且几乎不需要任何黑客或变通办法.
我完全建议你们再次学习 C ++, 并像我一样学会喜欢它.
来源: http://www.jianshu.com/p/05874d7a5f08