《Effective C++》Item1:视C++为一个语言联邦

一开始,C++只是C加上一些面向对象特性。C++最初的名称C with class也反映了这一点。

但是当这个语言逐渐成熟,它变得更活跃更无拘束,开始接受各种新观念、新特性和新的编程战略。异常(exception)对结构化程序引入了不同的做法,而模板(template)为我们带来了新的思考方式。

今天的C++已经是个多重范型编程语言,一个同时支持面向过程面向对象模板模板元编程的语言。这些能力和弹性使得C++已经成为了一个无可匹敌的工具,但也可能会引发某种疑惑:所有的“适当”用法似乎都存在意外情况。

一个最简单的处理方式是将C++视为一个由相关语言组成的联邦(而非是一种单一的语言)。在其中的某个“子语言”当中,各种守则和用例都很好理解,但是当在它们中间切换,或者需要组合使用这些特性时,可能存在问题。所以,务必要认识清楚各个“子语言”的设计概念和相关原则:

  • 面向过程的部分(C语言)。说到底C++仍然是以C语言的语法特性为基础的。代码块语句预处理器内置数据类型数组指针等基本语言元素统统来自C语言。许多时候C++对问题的解法实际上就是一种相对高级的C解法。
  • 面向对象的部分。这部分也就是C with class所诉求的:封装继承多态动态绑定等特性。
  • 模板的部分。C++代码当中可能充斥着各种模板。C++模板的功能过于强大,以至于它为我们带来了新的编程范型。
  • STL的部分。STL是一个模板程序库,它对容器迭代器算法函数对象有着特殊的规范和约定。当你需要伙同STL一起工作时,必须要遵守它的规约以避免给自己带来麻烦。

记住这四个“子语言”,因为当在它们中间切换时,存在很多的注意事项。例如,当使用面向过程的部分时,传递值往往会比传递指针要高效;但是当切换到面向对象的部分时,由于构造函数和析构函数的存在,传递const引用往往会更加高效;然而当再次跨入STL的部分中时,你会发现迭代器希望你能够进行值传递。

【注意】C++编程方式会根据上下文而发生变化,取决于你使用它的哪一部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值