码迷,mamicode.com
首页 > 编程语言 > 详细

《C++ Primer 5th(中文版)》“概览的概览”之第一部分——C++基础,第二章

时间:2018-02-20 15:18:02      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:连续   标识符   color   str   基于   其他   指定   div   是什么   

C++ Primer已经快读完了,但这本书光读一遍是绝对不行的。至少读两遍,把大部分可操作的习题做一遍,才能记住大部分细节。在这里,我想对C++第一部分——C++基础进行一次非常非常非常简略但结合核心部分的整合,带大家一览C++大略(很浅的那一部分),而不是迷失于细节。

第二章 变量和基本类型

2.1 基本内置类型

1.C++定义了算术类型空类型。常见的类型有bool, char, short, int, long, long long, float, double, long double, unsigned char, unsigned short, unsigned( int), unsigned long, unsigned long long...

2.类型转换。浮点变整型会丢弃小数点,其他类型转换为bool只会是false或者true,true实质上代表1,false实质上代表0。

3.尽量不要使带符号类型和unsigned类型混合使用,否则容易导致溢出问题(负数被转换为unsigned)。

4.unsigned之间的运算必须要保证结果不能是一个负数,否则会发生环绕现象,使结果变成非常诡异的大数。

5.以0开头的整数代表八进制,其后只接受0,1,2,3,4,5,6,7八种符号,否则会出错;以0x(0X)开头的整数代表十六进制,其后还接受8,9,A,B,C,D,E,F和a,b,c,d,e,f。

2.2 变量

6.std::string是一个库类型,其定义在命名空间std中。string的详细内容在第三章和第九章有详细讲解,在这里先不说了。

7.在初学的时候可能认为初始化和赋值没什么不同,毕竟从表面上看,它们都是“给一个变量一个值”。但实则不然,它们之间的差别其实非常大,尤其是在拷贝控制和动态内存分配等情况下,这两种操作的行为可能完全不同。

8.以int为例,初始化有四种方式:int a=0;   int a={0};    int a{0};    int a(0);  它们之间也有差别,在后面这个差别会比较明显。

9.在函数内定义变量但没有指定初值的,变量被默认初始化。此时变量被赋予默认值。默认值到底是什么取决于这个变量的类型,比如对于string,其不接受参数的构造函数(第七章)将其初始化为一个空串(注意,空串不是带一个空格的串,而是什么都没有)。

10.变量命名一般用小写字母,类名一般用大写字母开头,用户定义的标识符不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,函数体外的标识符不能以下划线开头。

11.一个名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。位于全局作用域的变量若为内层同名变量隐藏,可以通过全局作用域“::”来访问:

1 #include <iostream>
2 int a;//外部变量,与int a=0;等价
3 int main()
4 {
5     int a = 1;
6     std::cout << ::a << std::endl;//使用外部变量a,输出0
7     return 0;
8 }

2.3 复合类型

12.复合类型是指基于其他类型定义的类型。在C++中的复合类型中主要的两个就是引用和指针。

  对于引用,关键的一点是其相当于给已有变量起了个别名。这样的话也就相当于一种绑定,而不是重新拷贝一个副本;指针的值是一个变量的地址。

2.4 const限定符

13.const分为顶层和底层。顶层const指针代表这个指针的值(不是这个指针的地址,是这个指针指向的变量的地址)不能被改变,也就是说这个指针不能被赋值,但可以让这个指针指向其他合法的对象;底层指针代表这个指针所指的对象不能被改变(准确说,是不能通过这个指针的途径来改变。如果这个指针指向一个非常量,这个非常量当然可以通过其他途径来改变。可以想象成这个底层const很主观地认为他指向的是一个常量,所以自觉遵守规则,不改变他指向的这个值)。

2.5 处理类型

14.auto类型说明符可以用于推断类型。在C++14之后,auto已经几乎处处可用了,包括但不限于函数的返回类型,模板。注意,auto会丢弃顶层属性和引用属性,如果需要通过auto定义顶层或者引用类型,需要通过const auto、auto&或const auto&。

15.decltype类型提示符可以被想象成全真推断。注意,decltype不会计算其内的值,更不会对其内进行操作。比如declytpe(a=1) b;这一语句并不会把1赋给变量a。如果其内是解引用操作,decltype将得到引用类型。原因也很简单,看下面的代码:

int a=1,*b=&a;

*b=2;

这两行代码的第二行相当于把a的值通过指针间接改为2。大家可以想想,第二行的*b只有是引用类型,才能被绑定到a并真正改变a的值。如果*b的类型是值类型,则充其量是a的副本,对其赋值2并不会改变a本身。

  另外,如果给变量加上了一层或多层括号,decltype也将得到引用类型。

2.6 自定义数据结构

16.关于自定义数据结构,使用关键字structclass的区别仅仅在于两点:默认访问权限(第七章)和继承(第十五章)。

 

《C++ Primer 5th(中文版)》“概览的概览”之第一部分——C++基础,第二章

标签:连续   标识符   color   str   基于   其他   指定   div   是什么   

原文地址:https://www.cnblogs.com/starpast/p/8455231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!