一.c++的初始化
int mian()
{
int a=10;
int b(10);//用()来初始化
int c{10};//用{}来初始化,较统一标准
return 0;
}
二.c++语言输入与输出
#include<iostream>//输入输出流
using namespace std;
int main()
{
int a{0};
char ch{'0'};
cin>>a>>ch; //提取符
cout<<"a= "<<a<<"ch= "<<ch<<endl; //插入符,遇到endl结束
return 0;
}
三.const关键字
(1)const关键字在c++中的用法:const修饰的变量称为常变量,但在c++中以常量为主。
例如以下代码:
int main()
{
const int n=10;
int arr[n]={1,2};//在c语言中是错误的,但在c++中是正确的,n就相当于常数
return 0;
}
(2)const与指针的关系
int main()
{
int a=10,b=20;
int *p=&a;
const int*p2=&a;//指向为常性(解引用)
int const *p2=&a;
int*const p3=&a;//指针变量本身为常性
const int*const p4=&a;//指针变量和指针的指向都是常性
return 0;
}
(3)常变量与指针
int mian()
{
const int a=10;
int*p1=&a; //erro
const int*p2=&a; //ok
int *const p3=&a; //erro
const int *const p4=&a; //ok
int *p5=(int*)&a; //ok(不安全)
int *p5=const_cast<int*>(&a); //去常性转化
rteurn 0;
}
总结:能力强的指针赋值给能力收缩的指针。
四.引用
(1)引用的定义:类型&引用变量名称=变量名称;
&和类型结合称为引用符号,不是取地址的意思,代表变量的别名。
int main()
{
int a=10;
int b=a;
int &c=a;//引用,即同一实体两个名字,左值引用
c=b;
return 0;
}
(2)引用的特点
int main()
{
int a=10;
int &x; //erro 引用的定义必须初始化
int &y=NULL: //erro没有空引用
int&b=a;
int&&c=b; //erro没有引用的引用
}
左值引用:&可以取地址 左值:具名
右值引用:&&不可以取地址 右值:不具名
(3)const引用
int main()
{
int a=10;
const int b=20;
int &x=b;//error
const int &x=b;//ok
const int &y=a;//ok
const int &z=10;//ok
}
注意:常性变量只能初始化常引用;常性左值引用是万能的。
在swap交换函数中,用引用传递形参时,不用判空,比指针更安全。
重点:指针和引用的区别:
从语法规则上来将:1.指针储存某个变量或对象的地址,引用是 某个实例的别名。
2.程序为指针变量分配内存区域,而不为引用分配内存区域。
3.解引用指针的前面要加*,而引用可以直接使用。
4.指针变量的值可以发生改变,存储不同实例的地址,而引用在定义时被初始化,之后无法改变。
5.指针变量可以为空(NULL,nullptr),而没有空引用。因此指针变量作为形参时需要进行判空操作,而引用不用。
6.对指针变量使用sizeof求得指针的大小,而对引用变量使用sizeof得到的是变量的大小。
7.理论上指针的级数没有限制,但引用只有一级,即不存在引用的引用,但存在指针的指针。++引用和++指针的效果不同。
对指针变量的的操作会使指针变量指向下一个实体的地址,而不是改变实体的内容。
对引用的操作直接反映到引用的实体。
从汇编(本质)上说:引用是自身为常性的指针。
(4)引用的其他形式
int mian()
{
int a=10;b=20;
int ar[5]={1,2,3,4,5};
int *p=&a;
int*&pr=p;//引用指针
int &x=ar[0];
int (&br)[5]=ar;//引用数组
return0;
}
五.inline函数
内联函数,在编译期间编译器能够在调用点内联展开该函数。
inline函数是一种以空间换时间的做法,省去调用函数额开销,但是代码过长或者递归函数不会以内联展开该函数。
注意内联函数的声明和定义不建议分离,不然会导致链接错误。
如果函数的执行开销小于开栈清栈开销(函数体小),使用inline函数效率高,否则采用普通功函数处理方法。
inline函数和宏的的区别:
(1)内联函数在编译时展开,宏在预编译时展开。
(2)内联函数是嵌入到目标代码,宏是简单的文本替换。
(3)内联函数有类型检查,语法判断,宏只是替换。
六.缺省函数
1.缺省函数指在函数定义时为形参指定缺省值(默认值)。
缺省函数中函数的形参和实参个数可能会不一样。如果给出实参,将实参传递给形参使用,如果没有实参,则按缺省值进行调用。
但是缺省值必须放在函数的参数表的右侧,先定义所有的非缺省参数。
在多文件中,缺省参数在GG头文件的声明中指定,不要在函数的定义中指定。
七.函数重载
定义:两个或两个以上的函数可以使用相同的函数名,但是只要参数类型不同,或参数类型相同
而参数的个数不同,称为函数重载。
如果两个函数的参数表中参数的个数或类型,或顺序不同,则认为是重载。
当一个形参类型有const和volatile修饰时,如果形参定义指针或引用时,在识别函数声明是否相同时要考虑const和volatile修饰符,而定义普通变量时不考虑。
c++中函数可以重载的原因:函数名修饰规则和c不同,C语言会默认成函数的原名,而c++会修饰成函数名加上形参的缩写,因此参数不同,c++会认为是两个不同给的函数,从而实现重载。
标签:总结,const,函数,int,C++,基础知识,引用,变量,指针 From: https://blog.csdn.net/weixin_62913480/article/details/139049908