c++ 杂篇 未整理

术语“流”(stream)想要表达的是,随着时间的推移,字符是顺序生成或消耗

写入endl的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中

前缀std::指出名字cout和endl是定义在名为std的命名空间(namespace)中的。命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。

作用域运算符(::)

类定义了行为(类定义了对象可以执行的所有动作)

成员函数(member function) 是定义为类的一部分的函数,有时也被称为方法(method)。

点运算符(.)只能用于类类型的对象

调用运算符(())来调用一个函数。调用运算符是一对圆括号

条件(condition)求值结果为真或假的表达式。通常用值0表示假,用非零值表示真

数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作

一个char的空间应确保可以存放机器基本字符集中的任意字符对应的数字值。也就是说,一个char的大小和一个机器字节一样。

为了赋予内存中某个地址明确的含义,必须首先知道内存在该地址的数据的类型。类型决定了数据所占的比特数以及该如何解释这些比特的内容。

大多数程序员能够(也应该)对数据类型的使用做出限定从而简化选择的过程。

  • 当明确知晓数值不可能为负时,选用无符号类型
  • 使用int执行整数运算
  • 在算数表达式中不要使用char或bool,因为char在一些机器上是有符号,另一些机器上可能没有符号。如果需要使用一个不大的整数,可以明确指定类型是signed char 或者unsigned char
  • 执行浮点数运算选double

把一个布尔值赋值给非布尔类型是,初始值为false则结果为0,初始值为true则结果为1

当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值的总数取模后的余数。 把 -1赋值给8bit大小的unsigned char所得的结果是255

计算机中数值按补码存储的,-1的原码是10000001(有符号8位),补码(反码+1):11111111。所以直接赋值给unsigned char, 11111111等于255。

变量提供一个具名的,可供程序操作的储存空间。c++中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围,以及变量能参与的运算。对c++程序员来说,“变量”(variable)和“对象”(object)一般可以互换使用。

对象是指一块能存储数据并具有某种类型的内存空间

初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。

如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量:
extern int i; //声明i 而非定义i
extern double pi = 3.1416; // 定义
在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误
变量能且只能被定义一次,但是可以被多次声明

通常将声明符写成&d的形式来定义引用类型

int val = 1024;
int &refVal = val;  //refVal指向val (是val的另一个名字)
int &refVal2; //报错:引用必须被初始化
int &refVal3 = refVal // refVal3绑定到了那个与refVal绑定的对象上,这里就是绑定到val上

引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。
因为引用本身不是一个对象,所以不能定义引用的引用
引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。

指针(pointer)是“指向”(point to)另外一种类型的符合类型。与引用类似,指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。

  • 指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象。
  • 指针无须在定义时赋初值。和其它内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

获取对象的地址
指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&)

int ival = 42;
int *p = &ival;  // p存放变量ival的地址,或者说p是指向变量ival的指针

引用不是对象,没有实际地址,所以不能定义指向引用的指针

如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问改对象

int ival =42 ;
int *p = &ival;  // p存放着变量ival的地址,或者说p是指向变量ival的指针
cout << *p   // 由符号*得到指针p所指的对象,输出42

*p = 0;  //有符号*得到指针p所指向的对象,即可经由p为变量ival赋值
cout << *p;   //输出0

指针和引用都能提供对其他对象的间接访问,然后在具体实现细节上二者有很大的不同,其中最重要的一点就是引用本身并非一个对象。一旦定义了引用,就无法令其再绑定到另外的对象,之后每次使用这个引用都是访问它最初绑定的那个对象。

你可能感兴趣的:(c++ 杂篇 未整理)