c++ primer(一)

来源:互联网 发布:mac os 系统修复 编辑:程序博客网 时间:2024/06/05 22:52

(1)大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节”,存储的基本单元称为“字”,他通常有几个字节组成。

(2)char类型在一些机器上是有符号的,而在另一些机器上是无符号的,所以使用char进行运算时,很容易出问题。如果使用一个不大的整数,那么明确指定它的类型是signed char或者unsigned char。

(3)尽管我们不会故意给无符号对象赋一个负值,却特别容易写出这样的代码。例如,当一个算数表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。把int转换成无符号的过程和把int直接赋值给无符号变量一样:

unsigned u = 10;int i = -42;cout<<u+i<<endl;//如果int占32位,输出4294967264
切勿混用带符号类型与无符号类型

(4)编译器在每个字符串的结尾处添加一个空字符'\0',因此,字符串的字面值的实际长要比他的内容+1

(5)指定字面值的类型

L'a'   宽字符型字面值,类型是wchar_t

u8'hi!'   //utf-8字符型字面值(utf-8用8位编码一个unicode字符)

42ULL 无符号整形字面值,类型是unsigned long long

1E-3F  单精度浮点型字面值,类型是float

3.1415189L  扩展精度浮点型字面值,类型是long double

(6)c++程序员在很多场合都会使用对象这个名词,对象是指一块能存储数据并具有某种类型的内存空间

(7)实际上,在c++语言中,初始化和赋值是两个完全不同的操作。初始化的含义是创建变量时赋予一个初始值,而赋值的含义是把对象当前值代替。

(8)初始化:

int units_sold = 0;int units_sold = {0};int units_sold{0};int units_sold(0);
列表初始化是c++11新标准:如果我们使用列表初始化且初始值存在丢失信息的风险,就报错

(9)内置类型变量未被显示初始化,它的值由位置决定,定义于任何函数体外的变量被初始化为0。定义在函数体内部的内置类型不被初始化。一个未被初始化的内置类型的变量的值是未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。

(10)如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量。

extern int i; //声明i而非定义iint j;//声明并定义j
在函数体内部,试图初始化一个由extern关键字标记的变量,会引发错误。

定义和声明的区别看起来微不足道,实际上非常重要。如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时变量的定义和声明必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,决不能重复定义。

extern一般用在访问其他源文件中定义的变量和调用同一文件中下面定义的变量
比如a.cpp文件里定义了int a; b.cpp文件里就可以extern int a;来声明 这样b文件里的a变量就是a文件里的a变量

真正用的时候 这种需要被别的文件用的变量,必须在本文件中定义好,比如在文件1中定义extern int i=0;然后才可以再别的文件中使用,使用方式是:在类体的外部使用extern int i;这样在这个类中就可以使用该外部变量了,再次强调必须先定义好,才能再别的地方通过extern声明使用。例:

#include <QDebug>#include "myclass.h"int test_i;//定义 等同于 extern test_i =0;MyClass::MyClass(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags){ ui.setupUi(this); qDebug()<<test_i;}MyClass::~MyClass(){}#include "YourClass.h"//#include "myclass.h"extern int test_i;//在此类类体外部声明,在此类中即可使用YourClass::YourClass(void){ test_i++; int test_i;}

(11)cout<<::reused<<endl;

因为全局作用域本身没有名字,当作用域操作符的左侧为空时,向全局作用域发出请求获取作用域操作符右侧名字对应的变量。

(12)引用为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型。引用必须被初始化。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另一个对象,因此引用必须初始化。

定义引用之后,对其进行的所有操作都是在与之绑定的对象上进行的。

引用类型要和与之绑定的对象严格匹配,除了两种情况:

第一种,允许令一个指向常量的指针指向一个非常量的对象

第二种,将基类的指针或引用绑定到派生类对象上。




原创粉丝点击