c++变量的引用---5
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/
1.引用变量的主要用途:
用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝。
2.引用变量用法
创建变量的引用:int& a = b;(是将a的类型声明为int&,即int变量的引用)
注意:在声明变量的引用时必须初始化(如之前例句)
int a;
int& b;
a = b;//should not do this
3.只能通过初始化声明来设置引用,不能通过赋值来设置
(1)int& a = b;等同于int* const a = &b;
(2)只能通过初始化来设置引用,不能通过赋值来设置
int b = 100;
int& a = b;
int c = 50;
a= c;//this can change the b’s value to 50
4.将引用用作函数参数
(1)引用传递:将引用用作函数参数,使得函数中的变量名称为调用程序中的变量的别名。
(2)按值传递与按引用传递:
/*按值传递:2个变量,2个名称*/
void sneezy(int x)
int main
{
int times = 20;//创建times变量,赋值20给它
sneezy(times);
…
} void sneezy(int x)
{
…//创建x变量,将传递来的值20赋给它
}
/*按引用传递:1个变量,2个名称*/
void sneezy(int x)
int main
{
int times = 20;//创建times变量,赋值20给它
sneezy(times);
…
} void sneezy(int& x)
{
…//使x成为times的别名
}
(3)常量引用
如果程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用。
定义方式为:
double refcube(const double& ra);
(4)临时变量、引用参数和const
仅当参数为const引用时,如果实参与引用参数不匹配,C++将产生临时变量。
两种情况:
a.实参的类型正确,但不是左值。
左值参数:可被引用的数据对象,如:变量、数组元素、结构成员、引用和被解除引用的指针。非左值包括:字面常量和包含多项式的表达式
b.实参的类型不正确,但可以转换为正确的类型。
注意:如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。
(5)应尽量使用const
a.使用const可以避免无意中修改数据的编程错误;
b.使用cosnt使函数能够处理const和非const实参,否则只能接受非const数据;
c.使用const引用使函数能够正确生成并使用临时变量。
5.将引用用于结构
引用非常适合用于结构和类。引入引用的目的主要就是用于这些类型。
有如下代码:
struct sysop
{
…
int used;
} const sysop& use(sysop& sysopref)
通常,返回机制将返回值复制到临时存储区域中,随后调用程序将访问该区域。而返回引用则意味着调用程序将直接访问返回值。
const的意思是:不能使用返回的引用来直接修改它指向的结构。
use(looper).used = 10;//can not do this
6.引用,指针和按值传递该什么时候使用?
(1)使用引用参数的主要情况:
a.程序员能够修改调用函数中的数据对象;
b.通过传递引用而不是整个数据对象,可以提高程序的运行速度。
(2)对于使用传递的值而不做修改的函数:
a.数据对象很小,如内置数据类型或小型结构,则按值传递;
b.数据对象是数据,使用const 指针;
c.数据对象是较大的结构,使用const指针或const引用;
d.数据对象是类对象,使用const引用。
(3)对于修改调用函数中数据的函数:
a.数据对象是内置数据类型,使用指针;
b.数据对象是数组,使用指针;
c.数据对象是结构,使用指针或引用
d.数据对象是类对象,使用引用。
c++变量的引用---5的更多相关文章
- Makefile笔记之一 ------ 变量的引用及赋值
1.变量的引用方式: "$(变量名)"或者"¥{变量名}" 例如: ${Objs}就是取变量Objs的值 注意: 当变量名为单字符是可以采用:"$a& ...
- GNU make使用变量⑤变量的引用、定义等
在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...
- Python中的变量、引用、拷贝和作用域
在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...
- 深入理解PHP原理之变量分离/引用
19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation) 作者: Laruence( ) 本文地址: http://www.laruence.com/20 ...
- CI源码引用使用--php引用demo,静态变量和引用关系
CI源码引用使用在Common.php中,加载配置和类的方法 function &test() { static $a = ''; if (!$a) { $a ...
- php变量的引用及函数的引用
Php变量的引用及函数的引用放回 变量的引用 $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输 ...
- c++,基类声明的指针变量和引用类型变量可以指向派 生类的对象
基类声明的指针变量和引用类型变量可以指向派生类的对象,而反过来派生类的指针却不能指向基类变量. 这与基类和派生类之间,被允许的赋值方向是相反的. 但是从逻辑上很容易推敲其合理性.
- final修饰的变量是引用不能变还是对象的内容不能变?
int a=1;此时a是变量: StringBuffer a=new StringBuffer();此时a就是引用变量,可以说是a引用String对象,通过a来操作String 对象 final St ...
- C++ 变量的引用 &
创建变量的引用:int &a = b; 引用变量a是变量b的别名:是传址操作,把变量b的数据地址赋值给变量a,a和b指向同一个数据 主要用途:用作函数的形参,通过将引用变量用作参数,函数将使用 ...
随机推荐
- UTF-8 有BOM和无BOM
BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order).微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 AS ...
- Twitter CEO:有望进军中国 不会改变原则
新浪科技讯 8月12日下午消息,据台湾“中央社”报道,Twitter CEO科斯特洛(Dick Costolo)日前接受<日经新闻>专访时指出,Twitter有望进军中国大陆,科斯特洛表示 ...
- goldengate复制过程字符集处理一例
源端是oracle, al32utf8,表里有乱码,目标端是sybase cp936,两端的DB都不能改字符集,而且源端是目标端的超集,当复制有乱码的数据(非中文或英文数字等),目标端replicat ...
- 最新的goldengate monitor 12.1.3已经发布
Oracle GoldenGate管理包针对OGG提供企业级的监控和管理,包含有如下模块: Oracle Enterprise Manager Plug-in. 利用OEM框架查看.管理和预警OGG ...
- 第一课 Hello
using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; ...
- 《day09---继承-抽象类-接口》
//面向对象_继承_概述---单继承_多继承. //描述学生. /* class Student { //属性. String name; int age; //行为: void study() { ...
- HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...
- ubuntu下openoffice开发环境配置
安装openoffice或者liboffice 路径:/usr/lib/openoffice/program ,soffice 开启服务: 安装JDK 其默认路径:jdk7 版本号:1.7...,jd ...
- php大力力 [021节]mysql表名在mac下不能大写
2015-08-27 php大力力021.mysql表名在mac下不能大写 刚才数据库里面,phpMyAdmin狂出错. Some errors have been detected on the s ...
- Interview----最长连续乘积字串
题目描述: 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8. 也就是说,上述数组中,3 0.5 8这3个数的乘积3*0 ...