

我们的定义的时候两个变量都是短整型,但是相加之后的这个计算的结果却是转换成为两个int进行相加,然后把这个int类型的数据转换为这个short赋值给我们的这个folw变量,即使这个变量是short类型的,我们进行运算的时候也不会直接去使用这个short类型的数据相加,而是使用这个计算机最自然的语言:int,计算的速度很快,计算之后把这个结果转换为我们的这个接受变量的数据类型即可;

这个就是C++11标准里面添加上的这个auto声明,这个意义就是我们的这个变量的类型比较长的时候,我们就可以直接使用这个auto进行这个类型的识别,但是对于这个普通的简单的这个int类型之类的变量,我们也没有使用的这个必要;
什么情况下需要关闭这个报警系统呢,就是我们的这个代码在编写的时候,这个系统的报错是因为这个编译器过于严谨造成的(有的编译器可能不会报错,这个和编译器有关)
例如下面的这个实例,我们想要把这个arr2拷贝到这个arr里面去,这个arr的大小就是20,但是这个arr如果里面的这个元素个数大于20的话,就会有潜在的风险,这个编译器就是为了安全考虑的,但是显然我们的这个地方不会出现这个问题,因此我们可以使用一行代码关闭这个地方的报警提示的功能,就是下面的这个里面的第五行代码;

下面的这个就是对于这个字符串和string的输入输出的一个介绍,其中这个里面的数组我们测试了两个不同的情况,就是有没有进行初始化的操作;
没有进行初始化的操作的数组,他在求解这个长度的时候就会一直向后面找,直到找到这个斜杠0为止,这个就会打印出来一个随机值,这个时候我们是没有办法猜到这个打印的结果的;
如果是进行了初始化的这个数组,我们的这个strlen求解长度的数值就是确定的;
string就不同了,没有进行初始化的时候,这个默认的设置这个string的长度就是0,因为这个string的大小是可以根据这个实际情况进行自动的调配的,这个就是string和c风格的字符串比较明显的一个区别,string的I/O实际上就是string里面的输入输出,就是介绍的这个string和字符串的一个区别


简单的讲,左值就是可以取地址的东西,右值就是不可以进行取地址操作的东西,下面通过几个案例进行介绍:

在上面的这个代码里面,我们的变量a是可以直接取地址的,因此这个a就可以作为引用的参数,就是作为一个变量的别名(绰号),但是像这个具体的数值,或者是字符,以及这个表达式(a+3)这种的,我们如果对于上面的这几种进行取地址的操作,就会报错,因此他们这几类是不可以进行取地址操作的,也就是说不可以作为某一个变量的引用;
我们的这个引用可以使用int&b=a,但是不可以写作int &b=10这种,凡是右值,像这个字符,表达式以及这个具体的数值,都是右值,因此就不可以出现在这个引用表达式的右边;
我们的这个右值虽然不可以直接出现在我们一般的这个引用表达式里面,但是我们可以使用加上这个const进行修饰之后,上面的这个引用就可以正常使用了;

原来,我们直接在这个引用表达式的右边写上10,肯定是会报错的,因为这个10无法进行取地址的操作,也就是说这个10是右值,但是我们在这个前面加上这个const进行修饰之后,这个报错的信息就会消失;
这个实际上是因为我们加上这个const修饰之后,这个10就会赋值给一个temp临时变量,这个temp临时变量再去充当我们的引用值;
我们的这个const int& bb=10加上const是因为这个10本身不可以进行取地址的操作,加上const之后是为了生成temp,把临时变量这个左值作为引用;
下面的这个const string&str =" hello"这个加上const是因为我们的这个右边是常量,不可以进行修改,加上const是为了防止修改,这个hello这个字符串本身是可以取地址的;
因此,上面的两个const之间的这个作用是有区别的,我们等号右边的两个东西一个是可以取地址,一个不可以取地址,const在这两个里面的作用是不一样的;

就是原来不可以引用的右值,我们可以通过添加两个&&进行右值引用吗,这个也是一个语法规则,大致了解即可,后面我们会遇到这个右值引用的具体示例;

下面的这个其实就是引用的一个很简单的用法,但是这个里面可以让我们对于上面的这个知识进行综合的理解:

下面的这个文字说明了c风格字符串和char数组的区别,就是有没有斜杠0作为结束标志;
如果使用char*,我们可以使用这个循环。判断语句控制这个过程,直到遇到空值字符为止;

