C++部分易忘知识点(更新)

布尔类型(bool)

布尔类型是C++语言新增的一种基本数据类型,C语言中并未定义布尔类型,如果想在C中使用bool类型,可通过宏定义来自定义一个bool类型,参考以下代码:

#define bool int 
#define ture 1
#define false 0
布尔类型变量在C++中占1字节空间,bool类型取值范围仅有两个值:true和false。例: bool flag = true;

命名空间namespace

引入命名空间的目的是为了避免命名冲突,其关键字为namespace。试想两个不同程序员的代码整合到一起时,变量和函数重名而导致的问题会造成混乱,例如

int flag = 1;//程序员1声明的变量
/*
……//间隔若干行代码
*/
bool flag =true;//程序员2声明的变量
使用命名空间解决类似上面的命名冲突问题:

namespace Li{//小李声明的变量 
	int flag=1;
} 
namespace Xu{//小徐声明的变量 
	bool flag=true;
}
使用命名空间后,使用变量有两种方法:

①使用域解析操作符::

Li::flag=0;
Xu::flag=false;
②使用using声明

using Li::flag;
flag=0;//使用小李的flag
Xu::flag=false;//使用小徐的flag
using声明以后的程序中未出现指明域的flag,则都为Li::flag。


using不仅可以针对命名空间的一个变量,也可用于声明整个命名空间。如:

namespace Li{//小李声明的变量 
	int flag=1;
	char cnt=0; 
} 
namespace Xu{//小徐声明的变量 
	bool flag=true;
	double cnt=1;
}
using namespace Li;
flag=2;//小李的flag 
cnt='a';//小李的cnt 
Xu::cnt=2.0;//小徐的cnt 


常见的 using namespace std; 语句表示在程序中采用了std命名空间中的所有标识符,该命名空间包含C++所有标准库,例如头文件iostream.h中定义的所有变量、函数都位于std命名空间中,每次使用iostream中的变量或函数都要在前面加上std:: 很麻烦,所以使用using直接将std中的所有变量函数都声明出来。


引用

引用是C++对C的扩充,类似于指针,只是在声明时用&代替了*,引用可以看作被引用对象的一个别名,声明引用时必须同时对其进行初始化

int a = 10;
int &b = a;
cout<<a<<" "<<b<<endl;
cout<<&a<<" "<<&b<<endl;
b = 20;
cout<<a<<" "<<b<<endl;
在本例中,变量b就是变量a的引用,程序运行结果如下:

10 10

0018FDB4 0018FDB4

20 20

从这段程序中我们可以看出变量a和变量b都是指向同一地址的,也即变量b是变量a的另一个名字,也可以理解为0018FDB4空间拥有两个名字:a和b。由于引用和原始变量都是指向同一地址的,因此通过引用也可以修改原始变量中所存储的变量值,最终程序运行结果是输出两个20,可见原始变量a的值已经被引用变量b修改。

int a = 10;
const int &b = a;
b = 20;   //compile error
a = 20;
声明b为a的常引用,之后尝试通过b来修改a变量的值,结果编译报错。虽然常引用无法修改原始变量的值,但是我们仍然可以通过原始变量自身来修改原始变量的值,我们用a=20;语句将a变量的值由10修改为20,这是没有语法问题的。


引用还可以作为函数参数或函数返回值

#include<iostream.h>
using namespace std;

/*1.函数形参为引用类型时。调用函数值会将实参直接传递给变量,而不是将实参的拷贝传递给形参。
函数中修改参数值,则实参值也会被修改,与普通函数传值调用有一定区别 */
v
void swap(int &a,int &b){
	int temp;
	temp=a;
	a=b;
	b=temp;
} 


/*2.函数返回值为引用。普通返回值的函数return是传值返回,即将要返回的变量拷贝到临时存储空间,然后函数调用者从临时空间中取到函数返回值。
*/
int & add5(int &c){//如果c不声明为引用,那么c为局部变量,有可能函数调用完直接被销毁,在通过引用返回拷贝给变量时已经被销毁,因此返回值为引用时形参最好也为引用
	c=c+5;
	return c;
} 
int main(){
	int var1=2,var2=5;
	cout<<"var1="<<var1<<" "<<"var2="<<var2<<endl;
	swap(var1,var2);
	cout<<"var1="<<var1<<" "<<"var2="<<var2;
        var2=add5(var1);//运算结果直接拷贝给var2,为经过临时存储空间,因此没有临时存储空间,未避免出现返回前变量被销毁的情况,add5()形参也声明为引用
	cout<<var2<<endl;// 
}

 
 




猜你喜欢

转载自blog.csdn.net/jyqxerxes/article/details/78946839