C++ static、const、auto、explicit关键字作用

一、static关键字作用:

1、函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

2、在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外的其他函数访问;

3、在模块内的static函数只能被这一模块的其他函数调用,这个函数的使用范围被限定在声明它的模块之中;

4、在类中static成员变量属于整个类所有,对类的所有对象都只有一份拷贝;

5、在类中的static成员函数属于整个类所有,这个函数不接受this指针,因而只能访问static成员变量。


二、const关键字的作用:

1、欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对其进行初始化,因为以后就没有机会再去改变它了;

2、对指针来说,可以限定指针本身为const,可以限定指针所指向的数据为const,或者二者同时为const。const限定其值不能被改变;

 eg: const char* p=“abcdd” 说明p所指向的变量的值不能被改变。 char* const p=“abcdd”说明p指针所指针的地址不能被改变;

3、在一个函数内,const可以修饰形参,表明其是一个输入参数,在函数内部不能改变其值;

4、对于类的成员函数,若指定其为const类型,表明这是一个常函数,不能用于修改类的成员变量;

5、对于类的成员变量,有时候必须指针其返回值为const类型,以使得其返回值不能为“左值”。


三、auto关键字作用:

 auto用来申明自动变量,表明变量具有本地范围,其实大多数普通声明方式声明的变量都是auto变量,不需要明确指定auto关键字。auto变量在离开作用域时会自动释放,不会发生内存溢出情况(除了包含指针的类)。使用auto变量的优势在于不需要考虑变量是否被释放。


四、explicit关键字:

explicit用来防止由构造函数定义的隐式转换,可以避免不合时宜的类型变换。

eg:

不加explicit关键字,构造时会进行隐式转换,在声明对象b时,等价于test temp("324");test b=temp

class test
{
public:
	test(const std::string strTest){}
};

int main()
{
	test	a("123");
	test	b	=	"324";	//等价于test temp("324");test b=temp
	return 0;
}

而如果在构造函数之前加上 explicit关键字,编译器会提出错误如下:

1>d:\mytest\1111.cpp(11) : error C2440: “初始化”: 无法从“const char [4]”转换为“test”
1>        class“test”的构造函数声明为“explicit”

在实际代码中可能不会出现这种故意造就的例子,但发生隐转换,常常带来程序逻辑的错误,而且这种错误很难察觉。


effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit。我鼓励你遵循相同的政策。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值