C++常用关键字

1.const

作用:将变量定义为常量,用于防止意外修改,增强程序的健壮性;和static一样,修饰全局变量使其仅在当前文件中可见;

const修饰普通变量时必须在定义时初始化。

const修饰指针时:

const int* p1; //常量指针
int* const p2; //指针常量
const int* const p3; //指向常量的常指针

​ 1.常量指针,不能通过解引用来修改变量的值,但可以通过修改指针指向其他地址来修改;

​ 2.指针常量,指针所指的地址是不能修改的,但可以通过解引用对其重新赋值来达到修改的目的;

​ 3.指向常量的常指针,无论是地址还是指针所指的值都不能修改。

const修饰函数时:

​ 1.修饰函数的参数时,一般表示改值为传入参数,函数体内不能进行修改;

​ 2.修饰函数的返回值时,用于限制函数的返回值当左值使用;

​ 3.const成员函数,该const是用于修饰this指针的,即函数体内禁止修改对象的数据。

2.static

修饰局部变量时,使得该变量在静态存储区分配内存;其生命周期与程序相同,但作用域为局部作用域,并不能一直被访问;只能在函数首次被调用时进行初始化,之后的函数调用不再进行初始化。

修饰全局变量时,使得该变量在静态存储区分配内存;该全局变量仅在本文件中可见,在文件外是不可见的。

修饰函数时,该函数仅在本文件中是可见的,在文件外是不可见的,可以解决在多人协作时函数命名冲突的问题。

修饰成员变量时,所有对象只维持一份拷贝,可以实现不同对象之间的数据共享;无需实例化对象即可访问;不能在类内进行初始化,一般在类外进行初始化,并且初始化时无需添加static关键字。

修饰成员函数时,该函数不接受this指针,只能访问类的静态成员;无需实例化对象即可访问

注:静态存储区所有未初始化和初始化的变量存储在不同的区域。

int a;
int b = 1;
static int c;
static int d = 1;

int main() {
	static int e;
	static int f = 1;		
	cout << &a << endl; //0058A46C
	cout << &b << endl; //0058A034
	cout << &c << endl; //0058A470
	cout << &d << endl; //0058A038
	cout << &e << endl; //0058A474
	cout << &f << endl; //0058A03C
	return 0;
}
3.extern

extern用来说明此变量/函数是在别处定义的,此处仅进行声名。

staticextern 不可同时出现。

4.explicit

explicit只能用于修饰只有一个参数的构造函数,若该构造函数包含多个参数,那么除第一个参数外,其他参数都必须有默认值。

explicit关键字的作用是防止类构造函数的隐式自动转换。

注:隐式类型转换:可以用单个形参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。

class A{
public:
	A(int n){}
};
A a = 10; //此处会发生隐式类型转发

class B{
    public:
    explicit B(int n){}
};
B b = 10; //若使用explicit修饰后会报错
5.inline

inline是将函数展开,把函数的代码复制到每一个调用处。而不发生跳转,压栈等操作,可以节省时间并提升程序的执行速度。inline仅是给编译器一个建议。

inline仅适合函数体内代码比较简单的函数使用,不能包含复杂的结构控制语句。函数内的代码也不宜较长,否则容易导致内存消耗代价较高。

inlinedefine的区别:

1.inline在编译时展开,define在预处理时展开;

2.inline是一种函数,会进行严格的类型检查,而define不会进行类型检查,只是做简单的替换;

3.inline不允许出现复杂的语句,若使用了复杂的语句则不一定会被展开,而define对此不做要求且一定会展开。

6.register

register用于建议编译器将频繁使用的变量保存在寄存器中来提升程序的运行速度。

register变量必须是能被CPU所接受的类型。通常意味着register变量必须是一个单个的值,并且长度应该小于等于整形的长度。

register变量可能不存放在内存中,所以不能使用&来获取变量的地址。

欢迎评论区留言扩充、纠错或更新更多关键字。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值