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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,744评论 1 51
  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,703评论 0 1
  • 2.变量和基本类型 3.字符串、向量和数组 4.表达式 5.语句 2.变量和基本类型 c++的算术类型: 一个ch...
    暮落晴空阅读 860评论 0 0
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,675评论 3 44
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,828评论 1 32

友情链接更多精彩内容