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. VLFeat在matlab和vs中安装

    转:http://blog.csdn.net/u011718701/article/details/51452011 博主最近用vlfeat库做课题,网上搜索使用方法,一大片都会告诉你说:run(/v ...

  2. eclipse中配置jbpm3.2插件

    1.什么是jbpm?为什么要使用jbpm呢? 通俗一点讲,jbpm是一个负责管理工作流的一个产品,那么什么是工作流呢,所谓的工作流就是在办公自动化系统中,提交申请,申请经过多个部门领导审批,完成该流程 ...

  3. google protobuf service使用

    http://note.youdao.com/noteshare?id=c59aaf827878e7a3611588f3abcd3bee

  4. hihocoder #1584 : Bounce

    题意; 有一个n*m的网格阵,球从左上角开始在网格中碰撞,碰到边界就直角反弹,到达格子的角落结束,求途中经过一次的格子数. 代码: //神马规律啊,设x表示球与垂直面的撞击次数,y为球与水平墙面的撞击 ...

  5. linux 文件IO

    1.文件描述符 (1)文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表.(2)文 ...

  6. Network File System

    Network File System 2014-12-31 #system 接着上一篇博客Distributed Systems 分布式系统来扯淡,之前的博客一再在写文件系统,这次继续,只不过是分布 ...

  7. 一张图搞懂Spring bean的完整生命周期

    一张图搞懂Spring bean的生命周期,从Spring容器启动到容器销毁bean的全过程,包括下面一系列的流程,了解这些流程对我们想在其中任何一个环节怎么操作bean的生成及修饰是非常有帮助的. ...

  8. jQuery插件ASP.NET应用之AjaxUpload

    本次使用AJAXUPLOAD做为上传客户端无刷上传插件,其最新版本为3.9,官方地址:http://valums.com/ajax-upload/ 在页面中引入 jquery.min.1.4.2.js ...

  9. Javascript的执行过程详细研究

    下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我 ...

  10. Lua的各种资源2

    Lua Directory     This page is a top level directory of all Lua content at this wiki, grouped by top ...