第2章 变量和基本类型

2015-10-08 20:18:32

注:  之前解除过C++比较少,只学过C语言。

-----------------------------------------------------------

  • 内置类型是编程语言自己定义的一些类型,不需要我们自己定义了。 比如bool、int;

 

空类型Void  不对应具体的值,仅用于特殊的场合,例如最常见的是,当函数不反悔任何值时使用空类型作为返回值。

  • 使用浮点数时,选用double---因为float的精度不够,且计算的时候,双精度和单精度的代价相差无几。
  • 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示只取模后的余数。
  • 当赋给带符号类型一个超过它的表示范围的值时,结果是未定义的。  可能产生崩溃,继续工作,垃圾数据等。

比如 

unsigned char c=1  // 假设char占8比特,c的值为255

signed char c2=256//  假设char占8比特,c2的值未定义

 

自面值常量  一个形如42的值被称为自面值常量(literal)。  自面值常量的形式和值取决于它的数据类型。  nullptr是指针字面值。

  • 由单引号括起来的一个字符称为char型字面值。 双引号括起来的零个或多个字符是字符串型字面值。 区别:多一个\n。

    两类字符不能直接使用: 1. 不可打印字符 如退格或其他控制字符  2. 特殊含义字符(单引号、双引号、问好、反斜线),在此情况下

            需要用到转义字符(以反斜线开始,如\t)

 

在C++ 11新标准中,用花括号来初始化变量得到了全面的应用。

但注意的是:如果我们使用里边初始化且初始值存在丢失信息的风险的时候,编译器可能报错。

1 long double ld=3.14189265362 int  a{ld},b={ld};   //可能丢失数据的风险
3 int  c(ld),d=ld;      //正确

 

  •     标识符  -----坚持书写用户自定义的表示标识符中,不能连续出现两个下划线,也不能以下划线紧连大写字母开头。
  • 标识符 要能体现实际含义;
  • 变量名一般用小写字母,比如index而不是INDEX;
  • 用户自定义的类一般以大写字母开头,比如: Sales_item;
  • 如果标识符 又多个单词表示,则单词之间应有明显的区别,如student_loan不要写成studentloan。

 

---------------------------------------------------------------------------------------------------

复合类型    

 包括引用和指针。 

    引用(reference)---为对象起了另外一个名字。 引用时,必须初始化。

一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定(bind)而不是将初始值拷贝给引用。 一旦初始化完成,

引用和它的初始对象绑定在一起。 因为无法令引用重新绑定到另外一个对象;因此引用必须初始化。

注: 引用只能绑定在对象上而不能绑定在字面值或某个表达式的计算结果绑定在一起。

 

指针  指针即是地址;指针变量----专门存放变量(或其他程序实体)地址的变量。  

例如让变量p存放整型变量a的地址,这样就可以通过变量p就可以找到a变量的值。变量p的就是指针变量----存放的地址就成为指针。

 空指针(nill pointer)

 

 int *p = NULL     //代表定义一个指向整型变量的指针p,然后p的值设为NULL,也就是设为0;用另一种方式说,就是对一个刚定义的指向整型变量的指针,赋初始值,让其指向0地址。
 1 #define NULL 0  //注意NULL就是NULL,它被宏定义为0;
 2 
 3  int *p = NULL  // 代表定义一个指向整型变量的指针p,然后p的值设为NULL,也就是设为0;用另一种方式说,就是对一个刚定义的指向整型变量的指针,赋初始值,让其指向0地址。 
 4 
 5 *p = NULL //代表对一个由指针p指向的变量(什么类型,不知道),赋值为0,是将那个变量赋值为0。
 6 
 7  
 8 
 9 我们可以先看下面的代码:
10 
11 
12    int *p = NULL;    //这时候我们可以通过编译器查看p的值为0x00000000。
13 
14 这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int类型的数据;在定义变量p的同时把p的值设置为0x00000000,而不是把*p的值设置为0x00000000。这个过程叫做初始化,是在编译的时候进行的。就好比我们定义了一个int型的变量,但是没有赋初值,那么编译器会自动赋初值为0,同理对于指针,就赋初值为0地址。

 

 

 

 

 

 

  预处理变量(preprocessor variable),预处理变量不属于命名空间std,他有预处理器负责管理,因此我们可以直接使用预处理变量而无须在前面加上std:。

 

 常量表达式(const expression)是指值不会改变,并且在编译过程就能得到计算结果的表达式。

  • 一个对象(或表达式)是不是常量表达式由它的数据类型和初始值决定。
  • C++ 11新标准规定,允许将变量声明为constexper类型,以便由编译器来验证变量的表达式是否是一个常量。

字面值类型(literal type )  一般比较简单,值也显而易见、容易得到。 比如:算术类型、引用和指针。

 

 

------------------------------------------------

2.5 处理类型

类型别名(type alias),两种方法

 

1 typedef double wages;
2 
3 
4 using SI=Sales_item;  // 别名声明,很显然没有分配地址

 

 

 

 

decltype  希望从表达式的类型推断出要定义的变量类型,但不想用该表达式的值初始化,其作用是选择并返回操作数的数据类型。

 

decltype ((variable));   //双括号永远是一个引用



int i=42;
decltype (i) e; //正确: e是一个(未初始化)的int
decltype ((i)) d; //错误: d是引用,必须初始化。

 

 

 

预处理概述: 却白头文件多次包含仍能安全工作的常用技术。

1 这二者主要用于防止重复包含。我们一般在.h头文件前面加上这么一段:
2 
3 //头文件防止重复包含uncA.h
4 
5 #ifndef FUNCA_H
6 
7 #define FUNCA_H  //头文件内容
8 
9 #end if

 

 

 

 

 

 

 

 

 

 

 

posted @ 2015-10-08 22:46  蜗牛在奔跑  阅读(231)  评论(0编辑  收藏  举报