C++语言的奥秘:Duang!那些你必须知道的事情

发表时间: 2016-11-09 12:03

艾瑞宝迪看过来!(偷偷唱起来了什么鬼......)话说今天,阳光明媚风景如画,正是畅所欲言夸夸其谈的好日子哇,所以,咱们聊聊C++可否?品一杯茶,执一支笔,45°仰望沉思(很好,装叉技能开启)。所谓C++,那可是编程语言中的大大大大咖,无人不知无人不晓,放之四海Duang力无敌。然而,还是有一些不得不说的事儿需要告知各位兄台,请耐下心来听我细细道来。

【C++注意事项一】数据类型及类型转换

本篇中咱们讨论如何选择类型和类型转换的问题。

如何选择类型呢?

1.当数值不可能为负时,选择无符号类型;

2.当数值超过了int的表示范围时,选用long long;

3.在算术表达式中不要使用char或bool,只有在存放字符串或布尔值时才使用它们;

4.执行浮点数运算选用double,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。

类型转换上我们则需要注意:

1.当我们把一个非布尔类型的算术值赋给布尔类型时,初始值为0则结果为false,否则结果为true;

2.当我们把一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1;

3.当我们把一个浮点数赋给整数类型时,进行了近视处理。结果值将保留浮点数中小数点之前的部分;

4.当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数;

5.当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。

关于无符号数的转换感兴趣的小伙伴们自己研究啦。

【C++注意事项二】变量声明和定义

不可能将所有的C++程序放到一个文件中咯,因此C++就支持了分离式编译机制,它允许将程序分为若干个文件,每个文件可被独立编译。

C++是如何支持分离式编译的呢?通过将声明和定义分离开来。

  • 声明使得名字为程序所知,文件如果想使用别处定义的名字则必须包含该名字的声明;

  • 定义(definition)负责创建与名字关联的实体。

1.一个声明语句由一个基本数据类型和紧随其后的一个声明符列表组成。

2.定义还需要申请存储空间,也可能会为变量赋一个初始值。

3.extern语句如果包含初始值就不再是声明,而变成了定义。

4.在函数体内部,如果试图初始化一个由extern关键字标记的变量将引发错误。

5.变量能且只能被定义一次,但是可以被多次声明。

6.如果要在多个文件中使用同一个变量,就必须将声明和定义分离。

【C++注意事项三】引用

通俗来讲,引用(reference)就是给对象另外一个名字。

1.引用必须被初始化;

2.引用即别名。引用并非对象,它只是另外一个已经存在的对象的名字;

3.引用类型的初始值必须是一个对象;

4.可以把引用绑定到const对象上,就像绑定到其他对象一样被称为对常量的引用;

5.非特殊情况下,所有的引用类型都要和与之绑定的对象严格匹配;

6.对const的引用可能引用一个并非const的对象。

【C++注意事项四】指针 Pointers

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

其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象;

其二,指针无须在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

指针的值(即地址)应属下列4种状态之一:

1.指向一个对象;

2.指向紧邻对象所占空间的下一个位置;

3.空指针,意味着指针没有指定任何对象;

4.无效指针,也就是上述情况之外的其他值。

还有关于常量等精彩内容咱们就略过咯,介于这些洋洋洒洒全英文描述,感兴趣的小伙伴们欢迎自行观阅,我等平民先行遁了......

详情请戳下方链接哦:

【C++注意事项】1数据类型及类型转换

https://yq.aliyun.com/articles/986

【C++注意事项】2变量声明和定义

https://yq.aliyun.com/articles/985

【C++注意事项】3引用

https://yq.aliyun.com/articles/984

【C++注意事项】4指针 Pointers

https://yq.aliyun.com/articles/983

【C++注意事项】5 Top-level const,The auto and decltype Type Specifier

https://yq.aliyun.com/articles/982

【C++注意事项】6 Library string Type

https://yq.aliyun.com/articles/981

【C++注意事项】7 Library vector Type

https://yq.aliyun.com/articles/980