2.1 基本内置类型

基本内置类型是C++“自带”的类型,区别于标准库定义的类型。使用时不需要应用标准库就可以使用,我们可以理解为数字型有下面这些

整形:就是整数或者是没有小数位的数。它包括bool(0,!0) , char, wchar_t(非标准英文字符用char无法全部表现所以需要这个类型来表示),short, int ,long。 整形中除了bool外其他类型可以是带符号,也可以是无符号的,无符号的取值范围不能为负,有符号取值可以有正有负,但由于有符号数所占位其中一位是符号位所以它的正数取值范围要比无符号范围小一位。

浮点型:就是带小数的数,包括float , double , long double他们之间的区别是取值范围和精度,可以根据你的需要选择合适的类型。

char , wchar_t 两个类型虽然都是字符型但区别比较大:

  • 在宽度上来说,一个是1byte,一个是2byte(在linux上实际是4byte)
  • 在编码上来说 wchar_t表示unicode编码方式
  • 以上不同说明 wchar_t 可以包含更多内容比如中文,日文等等。

建议:使用double类型基本上不会有错,在float类型中隐式的精读损失是不能忽视的,而双精度计算的代价相对于单精度可以忽略

2.2 字面值常量

就是常量本身,比如 21, “name” 表示类两种类型的字面值。有些类型有多重表示法,比如数字可以用不同进制表示,浮点型可以用科学计数法书写等等。

以0开头的是八进制,以0x或0x开头的表示十六进制,转移字符用\表示

C++所有字符串字面值都由编译器自动在末尾添加一个空字符:   ‘A’ vs “A”

2.3 变量

变量提供了程序可以操作的有名字的存储区

变量是对数据的有名存储,既然有名就可以对改数据做一些操作如赋值修改等等。这里有两个表达式概念先了解一下

左值:左值可以出现在赋值语句的左面或者右面

右值:右值只能出现在赋值语句的右面儿不能出现在左面

变量是左值,常量是右值,字面值常量也是右值

初始化(重要)

C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化则是把初始化式放在括号中

int ival(1024);

int ival = 1024;

int ival;// 没有初始化内容,它的值由系统分配规则是在栈区和堆区(函数内定义或者类里面定义)都取随机值,在全局区(全局常量,静态变量)都是全零值。

初始化不是赋值:初始化是创建变量并给他赋值,赋值则是擦除对象的当前值并用新值代替

对内置类型来说,复制初始化和直接初始化几乎没有差别

对类类型的对象来说,有些初始化仅能用直接初始化完成

声明和定义

定义用于为变量分配存储空间

声明用于向程序表明变量的类型和名字,可以用extern关键字声明变量而不是定义它,extern是说明变量定义在程序的其他地方

注意如果声明有初始化式,那么可以被当作定义,即使声明标记为extern

 extern double pi = 3.1415    //定义

变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量

一个文件含有变量的定义,使用变量的其他文件包含变量的声明

2.4 const限定符

限定符表示定义一个常量,常量一但定义则不可更改,所以必须在定义时初始化。

常量分为两类 编译时常量 和 运行时常量(在.NET中标示为readonly) 编译时常量是定义后直接初始化的常量,运行时常量值要初始化的值必须要通过代码运行才可以确定的

2.5 引用

引用是别名

引用就是对某个对象的另外一个别名。引用最重要的作用是函数传参。

const引用,可以读取但不能修改

注意分清常量引用还是变量引用

变量引用
int val = ; int &refval = val; // 引用了一个变量 int &refval1 = ; // 错误,12是个字面常量,常量必须要用常量引用 refval = ; // 等价于 val = 2 常量引用
const int val = ; const int &ref1 = val; // 引用了一个一般常量 const int &ref2 = ; // 引用了一个字面常量 int &ref3 = val; // 错误,常量必须要使用常量引用,ref3是个变量引用
int var = ;
const int &ref2 = var // 常量引用指向了一个变量,这时候
refval2 = ; // 不允许通过常量引用来做任何更改操作
varval = ; // 但是可以用原始变量来更改内容

对于引用还有一点很重要:非常量引用类型必须严格匹配,常量引用可以在内置类型之间相互引用

 double a = 123.4;

 int &b = a; // 错误,类型不匹配

 const int &c = a; // ok
// 这个操作实际等同于
int temp = a;
const int &c = temp;

2.6 typedef

2.7 枚举

枚举是一组可选常量值,既然是一组可选值说明包含多个常量。枚举定义语法如下

enum val{val1 = 2, val2 = 4, val3}  // 最后一个内容没有显示给值等价于 val3 = 5

如果不指定值默认第一个值从0开始下一个依次+1递增。

枚举的每一项都是一个唯一的const类型值,上面的定义有点类似于

const val1 = 2; const val2 = 4; const val3 = 5;

由于是const的,所以 val2 = 1 或者 val a = 2; 都不允许。

枚举项和int类型值有对应关系,但是二者只能单向转换,枚举可以自动转成int,而int却不能转成枚举

2.8 类类型

2.9 编写自己的头文件

头文件用于声明而不是定义

一些const对象定义在头文件中,当const为常量表达式放在头文件中(常量表达式是编译器在编译时就能够计算出结果的表达式),原因是const变量默认时定义该变量的文件的局部变量,所以把它们的定义放在头文件中是合法的

c++ primer 2 变量和基本类型的更多相关文章

  1. 再读《C++ Primer》——变量和基本类型

    刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内 ...

  2. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  3. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  4. C++ Primer 笔记(2)第二章 变量与基本类型

    第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...

  5. C++ Primer : 第二章:变量和基本类型(1)

    变量和基本类型之第一篇:基本内置类型和变量 一. (1) C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16 ...

  6. C++ Primer 学习笔记_5_变量和基本类型(续2)

     变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...

  7. <<C++ Primer>> 第二章 变量和基本类型 术语表

    术语表 第 2 章 变量和基本类型 地址(address): 是一个数字,根据它可以找到内存中的一个字节    别名生命(alias declaration): 为另一种类型定义一个同义词:使用 &q ...

  8. C++拾遗(一)——变量和基本类型

    今天看到一个小小的算法,交换两个数却不引入中间变量,想了下没什么思路.看了答案是这样: int a, b; a = a + b; b = a - b; a = a - b; 感觉还是挺有想法的,借此也 ...

  9. C和指针 第三章 变量的储存类型 auto、static、register以及static关键词

    变量的储存类型决定标量何时创建,何时销毁以及他的值保持多久.有三个地方可以储存变量: 普通内存static 运行时堆栈auto 硬件寄存器register 变量的缺省储存类型取决于它的声明位置: 静态 ...

随机推荐

  1. FindBugs错误修改指南 【转】

    FindBugs错误修改指南 1. EC_UNRELATED_TYPES Bug: Call to equals() comparing different types Pattern id: EC_ ...

  2. Codeforces Round #209 (Div. 2)A贪心 B思路 C思路+快速幂

    A. Table time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  3. [USACO12DEC] 逃跑的BarnRunning Away From…(主席树)

    [USACO12DEC]逃跑的BarnRunning Away From- 题目描述 It's milking time at Farmer John's farm, but the cows hav ...

  4. codeforces 691E 矩阵快速幂+dp

    传送门:https://codeforces.com/contest/691/problem/E 题意:给定长度为n的序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二 ...

  5. Python --Redis Hash操作

    一.Redis Hash操作 Redis 数据库hash数据类型是一个string类型的key和value的映射表,适用于存储对象.Redis 中每个 hash 可以存储 232 - 1 键值对(40 ...

  6. python基础--文件操作实现全文或单行替换

    python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...

  7. CS46 C 枚举二分

    给你n*2个数其中n个数是原数减去了X值的数.问你满足条件的X值和原来的n个数.注意X为正整数. X should be positive,没0的 思路很简单,一个数必定会对应一个数,那么枚举一个数和 ...

  8. JVM学习十二:JVM之性能监控工具

    前面我们学习了很多JVM相关的理论知识,那么本节将重点讲述的是工具的使用,正所谓:工欲善其事,必先利其器.因此,本节介绍常用的性能监控工具,用于性能监控和问题排查. 一.系统性能监控 系统性能工具用于 ...

  9. Delphi 常用数据类型 字符串类型 数据类型等等

    字符串类型 Delphi有三种类型的字符: ●AnsiChar这是标准的1字节的ANSI字符,程序员都对它比较熟悉. ●WideChar这是2字节的Unicode字符. ●Char在目前Delphi早 ...

  10. layer弹窗的跳转功能

    1,本弹窗直接跳转父页面: @if(session('message')) <script> window.parent.location.reload(); //刷新父页面 var in ...