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. 服务器上的 Git - 在服务器上搭建 Git

    http://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E ...

  2. 我的emacs简易配置

    ;;------------语言环境字符集设置(utf-8)------------- (set-language-environment 'Chinese-GB) (set-keyboard-cod ...

  3. .Net并行编程系列之一:并行基础

    现在普通PC平台上面多核处理器的普及,让我们领教了能够利用多核进行并行计算的软件的处理能力,同时继承更多地核心正是当前处理器发展的趋势. 但是作为一个.NET开发人员,是否有时候会发现你的程序占用了其 ...

  4. 「Linux」制作一个Linux系统

    一.前言 Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们 ...

  5. UVA 10479 The Hendrie Sequence

    https://vjudge.net/problem/UVA-10479 打表找规律: 1.根据n可以确定第n项在上表中第i行 2.减去前i-1行,就得到了n在第i行的第j个 3.第i行的规律:1个i ...

  6. NOIP 2015 提高组 Day1

    期望得分:100+100+100=300 实际得分:100+100+45=245 T3 相似的代码 复制过去 没有改全,痛失55分 http://www.cogs.pro/cogs/page/page ...

  7. 【BZOJ】1040: [ZJOI2008]骑士 环套树DP

    [题意]给定n个人的ai和bi,表示第i个人能力值为ai且不能和bi同时选择,求能力值和最大的选择方案.n<=10^6. [算法]环套树DP(基环树) [题解]n个点n条边——基环森林(若干环套 ...

  8. kartik\grid\GridView 合计,多选,导出excel,header修改 等方法集合!

    先上完整demo 具体的以后再说 <?php //use yii\web\View; use kartik\grid\GridView; use yii\bootstrap\Html; use ...

  9. 用体渲染的方法在Unity中渲染云(18/4/4更新)

    github: https://github.com/yangrc1234/VolumeCloud 更新的内容在底部 最近在知乎上看到一篇文章讲云层的渲染(https://zhuanlan.zhihu ...

  10. NB二人组(一)----堆排序

    堆排序前传--树与二叉树简介 特殊且常用的树--二叉树  两种特殊的二叉树 二叉树的存储方式 二叉树小结 堆排序 堆这个玩意....... 堆排序过程: 构造堆: 堆排序的算法程序(程序需配合着下图理 ...