【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦
一开始,C++只是 C 加上一些面向对象的特性。C++最初的名称 C with Classes 也反映了这个血缘关系。
但是,现在,当这个语言逐渐成熟,它变得更活跃更无拘束,更大胆冒险,开始接受不同于 C with Classes 的各种观念、特性和编程战略。
今天的 C++ 已经是个多重泛型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。
那,我们又该如何理解这样一个语言呢?
最简单的办法是将 C++ 视为一个有相关语言组成的联邦的而非单一语言。
为了理解C++,你必须认识其主要的次语言:
C。说到底 C++ 仍是 以 C 为基础。
区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data typpes)、数组(arrays)、指针(pointers)等统统来自 C 。
但是 C 语言也有很多局限:没有模板、没有异常、没有重写。
Object-Oriented C++ 。
这部分包括 classes(构造函数 和 析构函数)、封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual 函数(动态绑定)……
Template C++ 。 这是 C++泛型编程的部分。
STL。STL 是个 template 程序库。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有着极佳的紧密配合与协调。
记住这四个次语言,当你从某个次语言切换到另一个,导致高效编程守则要求你改变策略时,不要感到惊讶。例如:
对内置类型而言 pass-by-value 通常比 pass-by-reference 高效;但当你从 C part of C++ 移往 Object-Oriented C++,由于用户自定义(user-defined)构造函数和析构函数的存在, pass-by-reference 往往更好。
因此,C++ 并不是一个带有一组守则的一体语言;它是从四个次语言组成的联邦政府,每个次语言都有自己的规约。记住这四个次语言你就会发现 C++ 容易了解的多。
【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦的更多相关文章
- Effective C++ 之 Item 1: 视C++为一个语言联邦
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 1. 视C++为一个语言联邦(View C++ as a fed ...
- Effective C++_笔记_条款01_视C++为一个语言联邦
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某 ...
- effective C++ 读书笔记 条款08
条款08 别让异常逃离析构函数: 假设在析构函数其中发生了异常,程序可能会过早结束或者导致不明白行为(异常从析构函数传播出去) 看代码: #include <iostream> usin ...
- effective C++ 读书笔记 条款11
条款11: 在operator= 中处理"自我赋值" 在实现operator=时考虑自我赋值是必要的就像 x=y .我们不知道变量x与y代表的值是否为同一个值(把x和y说成是一个指 ...
- Effective C++条款01: 视C++为一个语言联邦
一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...
- Effective C++ 条款01:视C++为一个语言联邦
四个次语言 C Object-Oriented C++ Template C++ STL
- effective C++ 读书笔记 条款14 以对象管理资源
如果我们使用一个投资行为的程序库: #include "stdafx.h" #include <iostream> #include <memory> us ...
- Effective C++ 条款一 视C++为一个语音联邦
1.C语言 区块.语句.预处理器.内置数据类型.数组.指针等内容 2.OC++ 类.封装.继承.多态.virtual函数 等 3.Template C++ 泛型 ...
- Effective C++之条款1:视C++为一个语言联邦
C++中的sub-languages有如下四种: C Object-Oriented C++: (classes ,encapsulation(封装),inheritance(继承),polymo ...
随机推荐
- js获取文件上传进度
js获取文件上传进度: <input name="file" id="FileUpload" type="file" /> &l ...
- Razor 语法糖常规用法
1.隐匿代码表达式 例: @model.name 会将表达式的值计算并写入到响应中,输入时采用html编码方式 2.显示表达式 例:@(model.name)会将输入@model.name字符串 3. ...
- Struts2 简介及学习方法介绍
Struts2 = webwork + struts1.x 尊重学习规律的操作 学习上痛苦的根源之一是只能走的时候逼我来跑 不是说深入的内容就不讲了,而是放到合适的时候讲 一段时间可以,长了集中不了 ...
- SaaS “可配置”和“多租户”架构的几种技术实现方式
1.数据存储方式的选择 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据库 一 ...
- centos系统下安装Nginx
参考链接 CentOS 7 用 yum 安装 Nginx Nginx负载均衡配置 下载并安装 #使用以下命令 sudo yum install -y nginx #sudo表示使用管理员权限运行命令 ...
- Html : 规范html代码的网站
html代码的规范也是很重要的,这里推荐一个网站,很好用,仓鼠是经常用的啦! https://htmlformatter.com/ 以上
- CVE-2017-8464 LNK文件(快捷方式)远程代码执行漏洞复现
北京时间2017年6月13日凌晨,微软官方发布6月安全补丁程序,“震网三代” LNK文件远程代码执行漏洞(CVE-2017-8464)和Windows搜索远程命令执行漏洞(CVE-2017-8543) ...
- linux系统管理命令kata练习
磁盘管理 #打印当前目录下,各个文件大小和目录的磁盘空间占用情况. #获取硬盘被占用了多少空间,目前还剩下多少空间等信息 df -lh #查看管理磁盘分区 fdisk -l #制作文件系统 mkfs ...
- Java访问重定向接口
背景:开发做了一个免登陆的接口,方便我后续给管理后台做一些小工具,问题来了,给的免登陆接口是个302如图的test_login,在重定向一个200的接口(eload_admin), 原本开始这样做:0 ...
- 反射java
所谓反射(Refection),其实就是程序自己能够检查自身信息,就像程序会通过镜子反光来看自己本身一样.反射使得 Java语言具有了“动态性”,即程序首先会检查某个类中的方法.属性等信息,然后再动态 ...