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 ...
随机推荐
- (总结)Linux的chattr与lsattr命令详解
PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...
- Ubuntu apt-get 详解
一.常用的APT命令参数: apt-cache search package 搜索软件包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-ge ...
- (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...
- redhat7 常用命令
关闭防火墙 systemctl stop firewalld 查看防火墙状态 systemctl status firewalld 永久关闭防火墙命令.重启后,防火墙不会自动启动.systemctl ...
- TCP协议和UDP协议的区别
1. TCP协议面向连接. UDP协议面向非连接 (有无链接)2. TCP协议传输速度慢. UDP协议传输速度快 (传输速度)3. TCP协议保证数据顺序. UDP协议不保证 (数据的有序性. 在IP ...
- 无法访问 ASP 兼容性模式
<%@ Page Title="" Language="C#" MasterPageFile="../theme/classic/content ...
- MYsql数据库ERROR总结
描述:#Warning: Using a password on the command line interface can be insecure.#ERROR 1045 (28000): Acc ...
- 微信小程序之----生命周期
在app.js的app()中注册程序 在页面.js中的Page({})中注册页面. 执行效果:
- C语言-数组
C语言中使用数组来存储相同类型的大批量数据. 数组: 数组名:起名规则和变量名一样: 定义数组:数组每个元素存储的数据类型+数组名[常量(时表示数组分配存储数据类型的个数也就是长度)]={每个元素,以 ...
- UnitOfWork实战
企业模式之Unit Of Work模式 在开始UnitOfWork模式之前有必要回顾下我们耳熟能详的Data Access Object(DAO)模式,即数据访问对象.DAO是一种简单的模式,我们构建 ...