布尔类型(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;//使用小徐的flagusing声明以后的程序中未出现指明域的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
引用
引用是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;// }