常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新的。

这篇主要说常引用。常引用是指所引用的对象不能被更新。

在实际应用中,常引用往往用来作为函数的形参,这样的参数称为常参数。在C++语言面向对象的程序设计中,引用的使用还是比较多的,其中使用 const 修饰的常引用使用的更多。使用常参数表明该函数不会更新某个参数所指向或所引用的对象,这样,在参数传递过程中就不需要执行复制构造函数,这将会改善程序的运行效率。

示例:

 #include <iostream.h>
const int N = ;
void print(const int *p, int n);
void main()
{
int array[N];
for(int i = ; i < N; i++)
cin>>array[i];
print(array, N);
}
void print(const int *p, int n)
{
for(int i = ; i < n; i++)
cout<<*(p + i);
}

该程序中有一个问题:print() 函数中,实参 array 是一个 int 型数组名,形参是 const 的指针,显然类型不相同,但却没有出现类型错误。这是因为形参虽然指向一个非 const int 型数组,该数组是可以更新的,但在 print() 函数中不能被更新。因此,一个能够更新的变量使用在一个不能被更新的环境中不破坏类型保护,所以不会出现类型不匹配的错误。

一种类型的变量或对象能够用于另一种类型的变量或对象可以使用的环境,这一特性被称为类型适应。

const 常引用的更多相关文章

  1. 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针

    一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...

  2. 【C++】const 常引用的用法

    用法: const int & a; 定义了一个整型常引用变量a. 特点: 1.不能够通过常引用变量来修改其值,如: const int & a = 10; a = 12;//编译报错 ...

  3. C++ 中的 const、引用和指针的深入分析

    1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只 ...

  4. C++ const常量对象、常量成员函数和常引用

    01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 class CTest { public: void SetValue() {} private: int ...

  5. C++基础之引用与指针的区别与联系、常引用使用时应注意的问题

    什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子:   #include<iostream> using namespace std; ...

  6. C++中对象的常引用

    直接传递对象名 用对象名做函数参数时,在函数调用时将建立一个新的对象,它是形参对象的拷贝. ================下面给出一个直接传递对象名的例子程序1.1================= ...

  7. C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

    命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...

  8. C++ Prime:const的引用

    可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用.与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象: ; const int &r1 = ci; ...

  9. const 相关知识 const和指针、const和引用

    以前老是对const概念不清不楚,今天算是好好做个笔记总结一下.以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数. 常量指针,指针 ...

随机推荐

  1. MSP430G2553之timerA产生PWM

    总结:选SMCLK(可以测出来)         若选ACLK,经示波器PWM时有时无 举例一: #include <MSP430G2553.h> #define CPU_F ((doub ...

  2. OpenCV函数解读之groupRectangles

    不管新版本的CascadeClassifier,还是老版本的HAAR检测函数cvHaarDetectObjects,都使用了groupRectangles函数进行窗口的组合,其函数原型有以下几个: C ...

  3. iPhone 6/6 Plus国行版开卖当日抢购攻略

    在距离苹果首批发售时隔一个月也就是北京时间10月17日,苹果iPhone 6.iPhone 6 Plus终于也要在中国大陆开卖,众多国内用户终于有机会安排自己的购机计划.据不完全数据显示,目前iPho ...

  4. <转>thinkphp的各种内部函数 D()、F()、S()、C()、L()、A()、I()详解

    D.F.S.C.L.A.I 他们都在functions.php这个文件家下面我分别说明一下他们的功能 D() 加载Model类M() 加载Model类 A() 加载Action类L() 获取语言定义C ...

  5. poj1992 数论

    //Accepted 168 KB 969 ms //n!中含有质因数p的个数为t=n/p+n/p^2+n/p^3+... #include <cstdio> #include <c ...

  6. Ubuntu系统下运行Eclipse出现找不到jre的问题的解决方法

    在Ubuntu的某些版本下,比如10.10,会出现以下奇怪问题: 1. 安装jdk 我下载的jdk是bin格式的,直接运行解压,得到一个文件夹. 这个文件夹作为jdk的安装目录,可以拷贝到任意目录. ...

  7. js 检测 flash插件以及版本号 通用所有浏览器

    var fls = flashChecker(); if (fls.h) { if (fls.v < parseFloat('8.0')) { alert("您当前的flash pla ...

  8. Date and Time

    The PHP date() function is used to format date and/or a time and formats as timestamp to a more read ...

  9. AmazeUI基本样式

    AmazeUI是一个轻量级.Mobile first的前端框架,基于开源社区流行的前端框架编写. Normalize AmazeUI使用了normalize.css,但做了些调整:html添加了-we ...

  10. ios openURL的使用(调用系统电话、浏览器、地图、邮件等)

    Safari Any URL starting with http:// which does not point to maps.google.com or www.youtube.com is s ...