这一章主要是关于变量处理方面的知识,包括变量的命名规则、变量类型、取值范围、分配内存、运输符和类型转换相关的知识。
1.预处理#define,通用格式是什么?
在c++编译过程中,需要先将源代码传递给预处理器,#define和#include一样也是一个预处理器编译指令
通用格式为
#define iNAME 12345;
但是我们会发现,不同的变量类型#define并没有很清晰的表达出来,因此C++推荐使用const关键字来定义常量,const定义常量的方式显式地表达出了常量的类型。
const int iName = 12345;
2.为什么变量定义需要初始化?
如果不对需要定义的变量进行初始化,该变量的值将是不确定的,换句话来说,这意味着该变量的值将是它被创建之前,相应内存单元保存的值,其内容是不确定的。
3.c++变量的几种初始化方式
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
int apple = { 1 };
int watermelon = 0;
int banana(0);
int pineapple{ 1 };
cout << "Hello World!\n";
cout << apple << endl << watermelon << endl<< banana <<endl<< pineapple << endl;
}
运行结果如下
可以看出这几种初试化方式在c++98都是允许的,为什么需要这么多的初试化方式呢,主要原因可能是为了使初始化变量的方式和数组以及类变量的初始化的方式更相似。
4.应该选用什么类型?
c++有多种整型类型,可以根据特定需求选择最合适的类型,比如条件允许的话,可以选用short代替int节省内存,也可以选用能使计算机性能提高的类型。
十进制第一位用1-9表示,八进制第一位用0表示,十六进制前两位用0x表示。
5.成员函数cout.put()的用法
ostream类中有一个put()的成员函数,它的作用是向输出流中插入一个字符,它可以替代<<插入运算符,使用该函数需要注意的是put()的形参一定是字符类型。
6.bool类型和整型的转换
bool变量的值可以是true或者false,分别表示逻辑真或假。
另外bool类型还可以和整型进行转换
int ans = true; //ans assigned 1
int promise = false; //promise assigned 0
bool start = 100; //start assigned true
bool end =0; //end assigned false
7.const关键字的使用
创建常量的通用格式如下
const type name = value;
cosnt比#define好主要是因为它能够明确指定类型;另外,可以使用c++的作用域规则将定义限制在特定的函数或者文件中;其次,const关键字可以用于更为复杂的类型中。
8.浮点数E的意义
d.dddE+n指的是将小数点向右移n位,而d.dddE-n指的是将小数点向左移n位。之所以称为"浮点",就是因为小数点可移动。机器编译时也是根据E的位置以及n的大小来进行浮点数运算的。
9.浮点数和整数有什么区别?
浮点数相对于整数来说,它可以表示带小数部分的数字,另外它提供的值范围也更大,但是浮点运算的速度比整数运算慢,并且精度将降低。
10.除法运算的结果
如果两个操作数都是整数,则结果的小数部分将会舍弃,使得最后保留的结果是一个整数,如果其中至少有一个操作数是浮点数,则小数部分将保留,结果为浮点数。
11.类型转换
c++中引入了4个强制类型转换运算符,static_cast<>可用于将值从一种数值类型转换为另一种数值类型
通用格式为
static_cast<typeName>(Value) //将value类型转换成typeName类型
11.auto关键字的含义
使用auto关键字来将变量的类型设置为初始值相同,让编译器能根据初始值的类型来推断变量的类型。
但是auto更多的是用在处理复杂类型,比如
std::vector<double> scores;
std::vector<double>::iterator pv = scores.begin(); //迭代器
/*以上可以重写*/
std::vector<double> scores;
auto pv = scores.begin();
12.c++提供了什么措施来防止超出整型的范围
c++没有专门的措施来防止变量的值超出范围,但是可以通过climit这个头文件来查看相应类型的范围。
13.字符类型和整型的转换是否等价?
字符类型和整型在值允许范围内可以相互转换。
char grade = 65;
char grade = 'A';
以上两条语句并不真正等价,但是在某些系统中,它们是等效的。