C++ Primer 笔记 第二章
C++ Primer
第二章 变量和基本类型
2.1基本内置类型
有算数类型和void类型;算数类型储存空间大小依及其而定。
算数类型表:
类型 |
含义 |
最小储存空间 |
---|---|---|
bool |
布尔型 |
- |
char |
字符型 |
8 |
wchar_t |
宽字符型 |
16 |
short |
短整型 |
16 |
int |
整型 |
16 |
long |
长整型 |
32 |
float |
单精度浮点型 |
6位有效数字 |
double |
双精度浮点型 |
10位有效数字 |
long double |
扩展精度浮点型 |
10位有效数字 |
2.1.1整型
包括整数字符和布尔型。
字符型:char和wchar_t,后者用于扩展字符集。
char有些实现中当做signed类型,而有些则被当做unsigned类型
内置类型的机器级表示:
让储存具有结构的基本方法是用块来处理储存;通常8位作为一个字节(1b=8B),32位或4个字节作为一个“字”。
可以将算数类型的任何值赋值给bool对象;0值算数类型代表false,非0代表true。
把一个超出其取值范围的值赋给一个特定类型时:
对于unsigned类型来说,编译器会对该值求模然后取所得值;对于signed类型,由不同编译器决定实际赋的值;
c++中,把负值赋值给unsigned对象是完全合法的,其结果是对该负数该类型的取值个数求模后的值。
在大多数机器中用long类型进行计算所付出的运行时代价远远高于int类型;而双精度计算代价相对于单精度可以忽略。
2.2字面值常量
只有内置类型存在字面值。
整形字面值规则0
20 //decimal
024 //octal 0(zero)24
0x24 //hexadecimal (or 0X24)
可以通过增加后缀,强制更改字面值常量类型。
浮点数字面值规则:
默认为double类型;加后缀F或f表示单精度;使用科学计数法时,指数用E或e表示。
用false or true表示布尔值
用将字符放在单引号内表示字符常量;前面加前缀L表示wchar_t类型。
可以将任何字符表示为以下形式通用转义字符:
\ooo
这里ooo表示三个八进制数字。也可用十六进制转义字符定义字符:\xddd
字符串字面值:双引号括起来的零个或多个字符。
为了兼容c,字符串字面值都由编译器在末尾添加一个空字符。
宽字符字面值,只需在前面添加前缀L。
两个相邻的仅由空格、制表符、换行符分开的同为字符串字面值或同为宽字符字面值,可连接成一个新字符串字面值或宽字符串字面值。字符串字面值和宽字符串字面值连接是未定义的。
2.3
c++是一门静态类型语言,在编译时会作类型检查。
2.3.2变量名
可以由字母数字先换线组成。变量名必须以字母或下划线开头,并且区分大小写。
2.3.4变量初始化规则
在函数体外定义的变量都初始化成0,在函数体里定义的内置类型变量不进行自动初始化。
2.3.5声明和定义
为了让多个文件访问相同的变量,c++区分了声明和定义。
使用关键字 extern 对变量进行声明。
一个变量可以被声明多次,但只能被定义一次。
如果声明由初始化式,那么它可被当做定义,如 extern int a = 10;
任何多个文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明。
2.3.6名字的作用域
作用域:用来区分名字的不同意义的上下文称为作用域。作用域是程序的一段区域。
2.4 const限定符
使用const把一个对象转换成常量,可以提高程序的可读性和可维护性。
因为常量在定义后就不能被修改,所以定义时必须初始化。
const对象默认为文件的局部变量,通过指定const变量为extern,就可以在整个程序中访问const对象。
非const变量默认为extern,要使变量能够在其他的文件中访问,必须显式地指定它为extern(P50)
2.5引用
引用是一种复合类型(用其他类型定义的类型)。
每一种引用都关联到某一其他类型,不可以定义引用的应用,但可以定义任何其他类型的引用。
初始化是指明引用指向哪个对象的唯一方法。
定义引用,如:int &r = i;
将普通的应用绑定到const对象是不合法的。
2.6 typedef
typedef用来定义类型的同义词。
使用typedef的目的:
隐藏特定类型的实现,强调使用类型的目的;
简化复杂的类型定义
允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
2.7枚举
定义和初始化
enum open_modes {input, output, append};
默认地,第一个枚举成员赋值为0,后面成员依次增1。
枚举成员是常量,用来初始化枚举成员的必须是常量表达式。
枚举成员的值可以重复。
每个enum都定义一种唯一的类型,枚举类型对象的初始化或赋值只能通过其枚举成员或者同一枚举类型的其他对象进行。
2.8类类型
定义类类型的最后必须有一个分号。
定义了类也就定义了一种新的类型, 类名就是该类型的名字。
定义变量和定义数据成员不是一个概念,由非常重要的区别。定义类的时候定义数据成员, 用定义完成的类类型定义对象的时候会根据相应的数据成员定义相应的变量。一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型,类不是在类定义里定义数据成员时初始化数据成员,而是通过称为构造函数的特殊成员函数控制初始化。
类成员函数可以使用类的任何成员。
用class和struct定义类的唯一区别在于默认访问级别:class成员默认为private,struct默认为public。
2.9头文件
头文件一般包含类的定义,extern变量的声明和函数的声明。
编译和链接多个源文件(P58)。
头文件用于声明而不是用于定义。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。例外:头文件可以定义类、值在编译时就已经知道的const对象(并非所有)和inline函数。这些实体可以在多个源文件中定义,只要每个源文件定义是相同的。
实践中不会有任何储存空间用于储存用常量表达式初始化的const变量。
如果const常量不是用常量表达式初始化,那么它就不应该在同文件中定义,相反,和其他变量一样,在一个源文件中定义并初始化,在同文件中添加它的extern。
预处理器用指定的头文件内容替代每个#include,因此设计头文件时,应使可以多次包含在同一源文件中。
预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。
头文件保护符可以避免头文件的多重包含。
C++ Primer 笔记 第二章的更多相关文章
- Android群英传笔记——第二章:Android开发工具新接触
Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- The Road to learn React书籍学习笔记(第二章)
The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...
- 深入理解 C 指针阅读笔记 -- 第二章
Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_ /*<深入理解C指针>学习笔记 -- 第二章*/ /* 内存泄露的两种形式 1.忘 ...
- [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”
[HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...
- 逆向基础 C++ Primer Plus 第二章 开始学习C++
C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- C++ Primer 笔记 第一章
C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...
随机推荐
- [算法] trie树实现
小写字母的字典树 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 1 ...
- Nagios简介
Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第 ...
- PHP 页面缓冲函数
1.flush:刷新缓冲区的内容,输出.函数格式:flush()说明:这个函数经常使用,效率很高.2.ob_start :打开输出缓冲区函数格式:void ob_start(void)说明:当缓冲区激 ...
- STM32 的加密实现(转)
源:STM32 的加密实现 基于STM32F103的ID号对应用程序的保护方法 目的:对运行于STM32的嵌入式代码程序进行加密 编译环境:IAR Embedded System for ARM5.5 ...
- php中__clone() shallow copy 只是浅复制
什么是浅复制呢? 简单一点,就是说复制一个对象的时候,如果对象$Obj的一个属性的类型是引用类型的,比如 $person这个属性,指向的是一个 叫做 $objPerson的一个引用, 那么复制$Obj ...
- 使用for循环输出空心的菱形的思路-还是没有办法理解
之前已经成功写过一次代码,今天重新看这个题目时,一下子又没了思路,在草稿纸上比划了大概十分钟才想到实现的思路.思路跟上次实现的完全一样,发现时间长了就忘记了!真是好记性不如烂笔头,何况我这么差的记性呢 ...
- HDU 5621 KK's Point
N个点中任意选取四个点,就能产生一个圆内的交点,所以圆内总共有C(N,4)个交点,圆上有N个,相加就可以了. 注意:组合数运算的时候会爆longlong,中间先除一下就可以了. #include &l ...
- PHP的Cookie、Session和跟Laravel相关的几点了解
这两天通过对Cookie和Session的查找和了解,网上关于它们两个的基础知识点都是差不多的,也收藏了几篇不错的博客,同时自己做了些实验后,有了以下几点了解: 1.setcookie 这里有三个地方 ...
- C++通过Callback向C#传递数据,注意问题
转载:出处 现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从 ...
- 设置MyEclipse黑色主题背景
设置MyEclipse黑色主题背景 1. 下载 http://eclipsecolorthemes.org/ 看哪个合适直接点击进入, 下载右边的epf 2. 下载完成...打开myeclipse. ...