百度网站解封,wordpress免费电子商务插件,家在深圳歌曲,重庆公司专业建站#pragma once 防止多次引用头文件#xff0c;保证同一个#xff08;物理意义上#xff09;文件被多次包含#xff0c;内容相同的两个文件同样会被包含。 头文件.h与无.h的文件#xff1a; iostream是C的头文件#xff0c;iostream.h是C的头文件#xff0c;即标准的C头文… #pragma once 防止多次引用头文件保证同一个物理意义上文件被多次包含内容相同的两个文件同样会被包含。 头文件.h与无.h的文件 iostream是C的头文件iostream.h是C的头文件即标准的C头文件没有.h扩展名将以前的C的头文件转化为C的头文件后有时加上c的前缀表示来自于c例如cmath就是由math.h变来的。 iostream.h里面定义的所有类以及对象都是在全局空间里所以你可以直接用cout 但在iostream里面它所定义的东西都在名字空间std里面所以你必须加上 using namespace std才能使用cout 一般一个C的老的带“.h”扩展名的库文件比如iostream.h在新标准后的标准库中都有一个不带“.h”扩展名的相对应区别除了后者的好多改进之外还有一点就是后者的东东都塞进了“std”名字空间中。 但唯独string特别。 问题在于C要兼容C的标准库而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件包含一些常用的C字符串处理函数比如楼主提到的strcmp。 这个头文件跟C的string类半点关系也没有所以string并非string.h的“升级版本”他们是毫无关系的两个头文件。 ———————————————— 版权声明本文为CSDN博主「zjllike」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/zjllike/article/details/7001114 按位异或是一种逻辑运算符其结果是两个操作数中相应位的异或运算。 具体规则如下 - 如果两个相应位的bit位相同则结果为0。 指针常量int* const p1指针为常量 常量指针 const int* p2指向常量的指针 记忆指针类型的常量指向常量指针、 常量引用(const int a)本质上是一个引用对常量的引用不能通过引用改变绑定对象的值 引用常量(int const t???)从汇编的角度来看“引用”编译器把他解释为指针常量既然已经是常量再加const不是多此一举吗所以加不加都一样 关于左值和右值先把最重要两点列出 1. 左值是有地址的变量具有持久性并且可以更改。即使左值是常量也可以通过const_static或者构造指针来更改。 2. 右值是没有地址的常量没有任何办法去更改右值的值并且右值在使用后就被立即销毁。右值函数返回值 右值引用其实函数内的临时左值延长了生命周期 我们常用的左值引用是用表示而右值引用则是用表示。既然我们可以创建右值的引用那么是不是可以获取它的地址这不是和我们前面说到的右值没有地址冲突吗事实有点残酷我们通过引用的根本就不是右值还是通过代码来说明。 总结 通过上面的研究可知所谓右值引用不过是延长了左值对象的生命周期这样的对象是可以取地址的、可修改的不具有右值的特性本质上来说是个左值。 那么c里面右值到底是什么呢我们可以看到当类中没有重写构造函数和析构函数时函数返回的这个对象和外面的不是同一个对象它会析构所以我们不可以对其求地址因为就算我们求得了地址函数执行后这个对象就被析构了我们持有的地址就失效了就这样虽然函数返回的这个对象在函数体内是个左值但是对于外界而言只是一个临时左值所以我们禁止对函数返回值求地址并且规定对函数体外而言返回的这个对象是个右值。我们说无法修改右值是因为它作用完后就被销毁了再也无法改变了。所以一句话概括就是右值就是临时的左值右值引用就是普通的左值。 返回值是引用时不会产生临时变量副本而是直接将a全局变量延长他的生命周期返回给主函数在主函数中b直接从a中拷贝值这样就避免了临时变量的产生。 int a1()
{int a 10;return a;
}int a2()
{int a 10;return a;
}int* a3()
{int a 10;return a;
}