const总结大全,不断更新,面试必备

一.const类型的变量在声明的时候一定要进行初始化,否则会报错。

二.在全局作用域中定义非const对象,它在整个程序中都可以访问
例如:
//file1.cc
int counter;
//file2.cc
extern int counter;
++counter;

在全局作用域中定义const变量意味着这个变量是该文件的局部变量,需要通过制定变量类型为extern,才可以在整个程序中使用该变量。
例如:
//file1.cc
extern const int counter=0;
//file2.cc
extern const int counter;
++counter;

三.const应用和非const引用
非const引用只能绑定到与该引用类型一致的变量上,并且不可以初始化为右值。
例如:
double a=1.22;
int &b=a;  //错误
double &c=a; //正确
int r=10;
int &d=r+55; //错误 
因为编译器会把代码进行转化:
int temp=a;
int &b=temp;
也就是说b绑定的不是a,而是temp,这样尝试通过b来改变a是不可能成功的,所以这样是不合法的。

const引用则可以绑定到不同的类型上或者绑定右值。
例如:
double a=1.22;
const int &b=a;  //正确
const double &c=a; //正确
int r=10;
const int &d=r+55; //正确

四.指向const的指针
例如:
double a=1.01;
const double * b=&a;
*b=2.1; //这显然是错误的
a=2.1; //这是正确的,a和*b的值都会变成2.01,有些人将之称为自以为指向const的指针

五.const指针
例如:
int a=10;
int * const b=&a; //这意味着b只能指向a
a=20;
*b=30; //上面两句均可以改变变量的值。

另外和第四条有关系,并且比较有意思的是:
typedef int * pint;
int value=10;
const pint a=&value;
pint const b=&value;
int * const c=&value; //3句话的效果是一致的

六,  如函数接受非引用/指针类型,形参类型/实参都忽略const. 即无论传递const或非const对象给授受非引用类型的函数,都使用相同的实例化.


七.在类类型中,类成员函数,前置const与后置const不同,前置const代表返回值为const类型,后置const代表,函数中不允许修改对象。

const int getvalue()
{return val;}

int getvalue() const
{return val;}

前者需要返回一个const int的值,后者则是代表在函数中不允许改变这个对象的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值