读书笔记 effective c++ Item 1 将c++视为一个语言联邦

简介: Item 1 将c++视为一个语言联邦 如今的c++已经是一个多重泛型变成语言。支持过程化,面向对象,函数式,泛型和元编程的组合。这种强大使得c++无可匹敌,却也带来了一些问题。所有“合适的”规则看上去都有例外。

Item 1 将c++视为一个语言联邦

如今的c++已经是一个多重泛型变成语言。支持过程化,面向对象,函数式,泛型和元编程的组合。这种强大使得c++无可匹敌,却也带来了一些问题。所有“合适的”规则看上去都有例外。我们怎样理解这样一门语言?

最容易的方法是不要将其看成单一的一门语言而是将其看成是一个有相关性的语言的联邦。在一个特定的子语言中,一些规则就比较简单,明确并且容易记忆。当你从一个子语言切换到另外一个子语言时,这些规则可能会改变。为了更好的理解c++,你必须识别主要的子语言,幸运的是,只有四种子语言:

  • C.c++以c语言为基础。块,声明,预处理,内建类型,数组,指针等等。都来自于c语言。在许多情况下,c++只不过提供了一些比c高级的解法,但是当你发现你自己正在使用c++中的c语言部分时,高效编程的规则反映出c语言更多的局限性:没有模板,没有异常处理,没有重载等等。
  • 面向对象c++.c++这部分就是带类的c语言,主要包括:类(包括析构函数和构造函数),封装 ,继承,多态,虚函数(动态绑定)等等。
  • 模板c++.这是c++的泛型编程部分,也是大多数程序员在经验方面所欠缺的,关于模板编程的设计遍及整c++编程,一些好的编程规则中包含只适用于模板的条款。事实上,模板编程如此强大,它带来了一个新的编程范型,模板元编程(TPM).
  • STL.STL是一个模板库。它将容器,迭代器,算法和函数对象优雅的整合到一起,模板和库也可以用其他的方法构建出来。使用模板库有自己特殊的方式,当你在使用STL时,你必须遵循它的约定。

将这四种子语言记在心里,在不同的子语言之间进行切换时,高效编程可能需要变换策略,譬如,c语言中对于内建类型,按值传递比按引用传递要高效。在c++中,对于类对象来说,因为用户自定义的构造函数和析构函数的存在,按引用传递比按值传递要高效,模板c++中也是如此。但是在STL中,迭代器和函数对象是模仿的C语言中的指针,因此按值传递会比较高效。

因此c++不是统一标准的语言。它是一个语言联邦,每个子语言都有自己的约定。

 转载请注明出处


作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

目录
相关文章
|
30天前
|
算法 编译器 C语言
C++语言的“Hello World”
C++语言的“Hello World”
14 0
|
30天前
|
编译器 C++
C++语言中const的用法
C++语言中const的用法
11 0
|
5天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add<T>`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
9 2
|
18天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
29 0
|
18天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
32 0
|
18天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
31 0
|
23天前
|
Java 程序员 C#
C++ 编程入门指南:深入了解 C++ 语言及其应用领域
C++是一种由Bjarne Stroustrup开发的跨平台编程语言,以C语言为基础并添加了面向对象特性。它用于创建高性能应用,支持类和对象,提供高级系统资源控制。C++经历了多次更新,包括C++11、C++14、C++17和C++20。因其可移植性和代码重用,成为流行选择。学习C++简单有趣,与C、C#、Java有共通性。开始C++编程,可以从打印"Hello World!"的简单程序入手。关注微信公众号`Let us Coding`获取更多内容。
23 0
|
24天前
|
存储 安全 C语言
不只是printf:探究C/C++语言中的可变参数函数
不只是printf:探究C/C++语言中的可变参数函数
27 0
|
24天前
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
19 0
|
30天前
|
C++ 容器
C++语言中for语句循环和作用类型
C++语言中for语句循环和作用类型
18 0