刚上大学那时,几个室友一块买了本《C++ Primer》第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用。后来知道有第5版了,一直觉得内容差不多吧。直到最近,再读其中的一些内容,结合自己曾经所学所用,很多地方都想得更深了。结合C++11,也有很多新的发现。人就是在不断否定过去的自己中成熟的。

以下是书的第2章,变量和基本类型,的一些笔记。

一、基本内置类型

基本数据类型包括算数类型(arithmetic type)和空类型(void)。

书中列出了每种类型的最小存储空间,在不同机器上这些类型的存储空间可能会不同,在程序中怎么获得实际的大小呢

C++中有个关键字 sizeof ,可以获得一个类型对应对象的大小(以字节byte为单位)。具体细节参考sizeof

1.算术类型

算术类型分为整型和浮点型。

表示整数、字符和布尔值的算数类型称为整型(integral type)。

char类型通常是单个机器字节,wchar_t用于扩展字符集,比如汉字和日语。

通常,short为半个机器字长,int为一个机器字长,long为一个或两个机器字长(跟操作系统有关)。

2.类型转换

注意有符号数转换为无符号数时可能会出现的问题。

比如:

for (unsigned i = 10; i >= 0; --i)
	std::cout << i << std::endl;

上面的程序中,i永远也不会小于0,循环条件一直成立。

分析:当i减小到0时,经过一次循环,i再减一,值为-1,-1不满足无符号数的要求,将被自动转换成一个合法的无符号数。

计算机中有符号数是用补码表示的,如果int类型占32位,那么-1的补码是32个1(负数符号位是1,其余各位取反,再在末位加1),转换成无符号数也就是232-1,所以当i等于0时,--i的结果将会是4294967295。

二、变量

1.初始化

一种特殊的初始化方式:列表初始化。

比如:int units_sold = {0};

如果我们使用列表初始化,并且初始值存在丢失信息的风险,编译器将会报错:

long double ld = 3.14159;
int a{ ld };

2.声明和定义

定义(definition):为变量分配存储空间,也可以为变量指定初始值。

声明(declaration):用于向程序表明变量的类型和名字。定义也是声明。

可以使用 extern 关键字声明变量而不定义它。

只有当extern声明位于函数外部时,才可以含有初始化式。

三、复合类型

复合类型主要是引用和指针。

1.引用

引用为对象起了另外一个名字,引用类型引用另外一种类型。定义引用时,程序把引用和它的初始值绑定在一起(不是将初始值复制给引用),无法令引用重新绑定到另外一个对象。

引用不是对象,引用不是对象,引用不是对象,重要的话说三遍!它只是已有对象的别名,所以不能定义引用的引用。而且引用的类型要和与之绑定的对象严格匹配。

2.指针

生成空指针的几个方法:

int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;

nullptr 是C++11新标准引入的,它是一种特殊的字面值。

以前我一直是用NULL来生成空指针,NULL是一个预处理变量,在头文件cstdlib中定义,它的值就是0。

在新标准下,现在最好是用nullptr。

四、const限定符

1.const的引用

允许为一个常量引用绑定非常量的对象、字面值。

int i = 42;
const int &r1 = i;

2.指针和const

指向常量的指针:

const double a = 3.14;
const double *ptr = &a;

const指针:

int b = 3.14;
int *const ptr = &b;

指针本身是一个常量,不代表不能通过指针修改其所指向的对象的值。

3.顶层const

顶层const:指针本身是个常量。

底层const:指针所指的对象是一个常量。

五、处理类型

1.类型别名

方法1:使用typedef关键字

typedef double wages;

方法2:使用别名声明

using SI = Sales_item;

方法2是新标准中的。

2.auto类型说明符

让编译器分析表达式所属的类型,auto定义的变量必须有初始值。

3.decltype

选择并返回操作数的类型。

decltype(f()) sum = x;

sum的类型就是函数f的返回类型。

再读《C++ Primer》——变量和基本类型的更多相关文章

  1. C++ Primer 变量和基本类型

    <C++ Primer 4th>读书摘要 基本上所有的语言都要提供下列特征: • 内置数据类型,如整型.字符型等. • 表达式和语句:表达式和语句用于操纵上述类型的值. • 变量:程序员可 ...

  2. 再读c++primer plus 004

    第九章  内存模型和名称空间 1.如果文件名包含在尖括号中,则c++编译器将在存储标准头文件的主机系统的文件系统中查找,但如果文件名包含在双引号中,则编译器将首先查找当前的工作目录或源代码目录(或其他 ...

  3. 再读c++primer plus 003

    1.如果函数返回一个结构而不是一个指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup.但在返回值为引用时,将直接复制给变量,其效率更高. 2.返回引用时最重要的一点是,应避免返回 ...

  4. 再读c++primer plus 002

    1.读取char值时,与读取其它基本类型一样,cin将忽略空格和换行符,函数cin.get(ch)读取输入的下一个字符(即使是空格),并将其赋给变量ch. 2.指针和const:(1)让指针指向一个常 ...

  5. 再读c++primer plus 006

    使用类: 1.重载限制:(1)重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符 (2)使用运算符时不能违反运算符原来的语法规则,不能修改运算符的优先级 (3)不能创 ...

  6. 再读c++primer plus 001

    1. OOP强调的是在运行阶段(而不是编译阶段)进行决策,运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时. 2.变量的值都存储在栈中,而new从被称为堆或自由存储区的内存区域分配内 ...

  7. 再读c++primer plus 005

    对象和类: 1.类和结构的唯一区别是结构的默认访问类型是public,而类为private: 2.其定义位于类声明中的函数都将自动成为内联函数,也可以在类声明外定义成员函数,并使其成为内联函数,为此只 ...

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

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

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

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

随机推荐

  1. js 20160810

    jquery 获取不到所有相同id 的元素 ,只能获取此id的第一个元素.可以获取所有相同class 的元素

  2. 【高级功能】使用 Ajax(续)

    1. 准备向服务器发送数据 Ajax 最常见的一大用途是向服务器发送数据.最典型的情况是从 客户端发送表单数据,即用户在form元素所含的各个 input 元素里输入的值.下面代码展示了一张简单的表单 ...

  3. arcgis api for flex之专题图制作(饼状图,柱状图等)

    最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过 ...

  4. HTML5学习笔记三 HTML元素、属性、标题、段落简介

    一.HTML 元素 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...

  5. 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因

    问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...

  6. RecyclerView-------MyAdapter代码

    package com.example.administrator.recyclerview; import android.content.Context; import android.suppo ...

  7. parawork功能使用说明

    项目整体估算 1.项目估算:依据项目属性,开发规模,参考行业平均生存率自动估算软件工作量.成本.工期 : 2.项目生产率分析:掌握研发生产率行业水平,方便项目管理 : 3.工期占比分析:了解项目关键节 ...

  8. sp_configure错误:不支持对系统目录进行即席更新。

    今天在一台数据库服务器上(Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)     Standard Edition (64-bit))使 ...

  9. ora-01033和ora-12560错误的解决方案

    1.登录pl sql 报01033的错误,如下图: 2.登录cmd中,报12560的错误,如下图: 3.查看服务和注册表都没有问题,如下: 查看服务,已启动,如下图: 运行regedit,进入HKEY ...

  10. 从零自学Hadoop(10):Hadoop1.x与Hadoop2.x

    阅读目录 序 里程碑 Hadoop1.x与Hadoop2.x 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的 ...