当前位置:  编程技术>c/c++/嵌入式

c++ const引用与非const引用介绍

    来源: 互联网  发布时间:2014-10-12

    本文导语:  const引用是指向const对象的引用。 代码如下: const int i = 10; const int &ref = i; 可以读取ref,但不能修改。这样做是有意义的,因为i本身就不可修改,当然也不能通过ref来修改了。所以也就有将const变量赋值给非const引用是非法的...

const引用是指向const对象的引用。
代码如下:

const int i = 10;
const int &ref = i;

可以读取ref,但不能修改。这样做是有意义的,因为i本身就不可修改,当然也不能通过ref来修改了。所以也就有将const变量赋值给非const引用是非法的。
代码如下:

int &ref1 = i; // error: nonconst reference to a const object

非const引用是指向非const类型变量的引用。
const引用可以初始化为不同类型的对象或者右值(如字面值常量),但非const引用不可以。
代码如下:

// legal for const references only
int i = 10;
const int & ref = 42;
const int & ref1 = r + i;
double d = 3.14;
const int &ref2 = d;

以绑定到不同类型的ref2为例解释原因,编译器会把ref2相关的代码转换如下:
代码如下:

int temp = d;
const int &ref2 = temp; // bind ref2 to temporary

ref2实际上是绑定到一个临时变量上,如果ref2不为const,那么按道理就可以通过修改ref2而修改d的值,但实际上d并不会改变。所以为了避免这个问题,ref2只能是const。

非const引用只能绑定到与该引用同类型的对象,const引用则可以绑定到不同但相关的类型的对象或绑定到右值。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C#基础知识系列八const和readonly关键字详细介绍
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决 iis7站长之家
  • 请问: setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 中的,(const char*)&bDontLinger是什么意思啊
  • 内核中static inline int strncmp(const char * cs,const char 的问题
  • const 全局变量 与 const 局部常量的差别?
  • 最后一个const的作用
  • 请问<%!BeansConstants CONST;%>是什么意思?
  • 有关const
  • const是关键字?怎么用?
  • 关于const char*&内容被修改,请教原因?
  • const A& a作函数参数要怎么使用?
  • 关于const char 如何指向不同的字符串
  • const char 和char 的转换问题
  • 深入const int *p与int * const p的区别详解(常量指针与指向常量的指针)
  • const类型重新赋值,编译通过,结果出乎意料,大家帮忙看看
  • struct resource *request_region(unsigned long,unsigned long,const char *)怎么理解?)
  • C语言 volatile与const同时使用应注意的问题
  • C#中 const 和 readonly 的不同
  • static_cast,dynamic_cast,reinterpret_cast,const_cast的区别及用法详解
  • 请问popen函数据第二个参数const char *type设为“w”是什么意思,man写的太简单了不明白?
  • [100分]Ubuntu下mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*
  • 解析C语言中如何正确使用const


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3