C++ const引用详解

(1) 在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用。

int ival = 1092;

int &re = ival;   //ok

int &re2 = &ival;   //错误

int *pi = &ival;

int *&pi2 = pi;   //ok

(2)  一旦引用已经定义,它就不能再指向其他的对象.这就是为什么它要被初始化的原因。
(3)   const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量。例如

double dval = 3.14159;
//下3行仅对const引用才是合法的
const int &ir = 1024;
const int &ir2 = dval;
const double &dr = dval + 1.0;

编译器为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户不能访问它。例如:

double dval = 23;

const int &ri = dval;

编译器将其转换为:

int tmp = dval; // double -> int

const int &ri = tmp;

种自动转换仅针对const型引用,非const引用手动为其添加临时变量,例如:

int iv = 100;

int *&pir = &iv;//错误,非const引用对需要临时对象的引用

int *const &pir = &iv;//正确

(4) 地址值是不可寻址的值

int * &ref3 = &a;   // 错误;

int * const &ref3 = &a;   // 正确;

(5) const引用只保证不会通过此引用修改被引用对象的值,但可通过其它指针修改被引用对象的值

由此可以构建"类内部可读可写,而外部只能读的数据成员",例如

public:
	const long& m_clReturnCode;
	const long& m_clErrorCode;

private:
	long m_lReturnCode;
	long m_lErrorCode;


构造函数这样写

CLStatus::CLStatus(long lReturnCode, long lErrorCode) : m_clReturnCode(m_lReturnCode), m_clErrorCode(m_lErrorCode)
{
	m_lReturnCode = lReturnCode;
	m_lErrorCode = lErrorCode;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值