文档章节

使用引用形参需要注意的问题

zray4u
 zray4u
发布于 2016/07/05 16:32
字数 378
阅读 21
收藏 0

先看下面这段代码:

int incr(int& val){
    return ++val;
}

int main(){
    short v1=1;
    const int v2=10;
    int v3=20;
    incr(v1);  //错误:v1不是int
    incr(v2); //错误:v2是const
    incr(v3); //正确
    incr(10); //引用类型的参数不能是常量
}

调用非const类型的引用形参,实参必须是非const类型的,而且实参的类型和形参的类型必须完全相同。注意这里是完全相同,short也不能代替int,int也不能代替short.

当调用一个const引用的形参函数时,如果实参不是一个变量或者该类型不匹配,函数会创建一个无名的临时变量用来存储实参的值,并把这个形参作为该临时变量的引用。示例代码如下:

#include<iostream>
using namespace std;

double refcube(const double &ra);

int main(){
    double side1=12.0;
    int side2=6;
    double c5=refcube(side2);  //实参和形参不匹配,但是可以转换成正确的类型。
    cout<<c5<<endl;           
    double c6=refcube(7.0);     //实参和形参匹配,但是不是左值。
    cout<<c6<<endl;
        
    double c7=refcube(side1+10.0);  //实参和形参匹配,但不是左值。
    cout<<c7<<endl;

    double  c8=refcube(side2+4);  //实参和形参不匹配,但是可以转换成正确的类型,而且不是左值。
    cout<<c8<<endl;
}

double refcube(const double& ra){
    return ra*ra*ra;
}

注意:这种生成临时变量必须是要以const引用为前提,如果函数为double refcube(double&ra),则上述程序无法运行。

本文转载自:

共有 人打赏支持
zray4u
粉丝 0
博文 216
码字总数 188982
作品 0
西城
私信 提问
Android NDK开发之旅19--C++--引用

C++ 引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 C++ 引用 vs 指针 引用很容易与指针混...

香沙小熊
2017/11/17
0
0
Effective C++ (6) 函数的参数传递

1.非引用形参 普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。 2.指针形参 函数的形参可以是...

文艺小青年
2017/06/09
0
0
C++ primer第二次阅读学习笔记(第7章:函数)

第七章: 函数 调用函数时如果该函数使用非引用的、非const形参,则既可以给函数传递const实参也可以传递非const实参。虽然函数的形参是const int类型的,但是编译器却将该形参定义为普通的i...

长平狐
2012/10/08
160
0
【C++笔记】函数(笔记)

在头文件中进行函数声明 建议变量和函数应该在头文件中声明,在源文件中定义。 使用引用避免拷贝 如果函数无须改变引用形参的值,最好将其声明为常量引用。 尽量使用常量引用 表示数组大小的...

u013165921
2018/01/15
0
0
引用类型形参

要想改变实参的值可以使用引用,因为引用类型的形参实际上就是实参的别名,当然能对实参进行操作了。 同时也可以通过指针来改变相应实参的值,但是使用引用会更加安全,更自然。 1.引用形参的...

maolv11
2013/03/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
29分钟前
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部