• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++const类型的引用参数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • string类定义了一种char*到string的转换功能,这使得可以使用C-风格字符串来初始化string对象。
  • 类型为const引用的形参其中一个属性表明:假设实参的参数类型与引用参数不匹配,但可以转换为引用类型,程序将创建一个正确类型的临时变量,使用转换后的实参值来初始化它,然后传递一个指向该临时变量的引用
  • 上面提到const引用为形参的属性,也就是说,如果引用的参数是const,则编译器在某些情况下会生成临时变量,比如下面这两种情况:
    1, 实参类型不正确,但可以转换为正确类型。
    2, 实参类型正确,但不是左值
void g(string &a,const string &b)
{
    cout<<"a address :"<<&a<<endl;
    cout<<"b address :"<<&b<<endl;
    
//    return a; 
}

string f()
{
}
int main()
{
    string input="I love you";
    int a=1;
 //   int b=2;
    cout<< "input address: "<<&input<<endl;
    const char *b="***";
    cout<<"b address: "<<&b<<endl;
    
    g(input,b);
    
//    g(input,input);
    
    getchar();
return 0;
}

可以看到g函数的参数一个为string& 一个为 const string&

我们将input="I love you"和const char *b="***";作为参数传入g函数,分别打印传入前和传入后变量的地址我们来看一下结果。

可以看到将字符串常量传给g函数的const string&参数打印出的地址与传入的地址不同,这说明函数自动生成了一个临时变量将字符串常量自动转化为string类型。

 

 

那我们再看另一个例子

1 string f();
2 string g(string & str);
3 
4  g(f());
5  g("abc");

程序编译在4,5行出错,这是为什么呢。

第5行的错误可以由上面的例子解释,当引用参数与实参不匹配,但可以通过转化为引用类型时,要将引用声明为const。

第4行的错误可以知道,将一个临时变量作为实参传递给参数时,也同样需要将参数类型设为const。

 

 

 

以上是针对string类型的参数做的实验,那么其他类型的参数是不是也同样是这样的规则呢?

 

 1 void g(int &a,const char &b)
 2 {
 3     cout<<"a address :"<<&a<<endl;
 4     cout<<"b address :"<<&b<<endl;
 5     
 6 //    return a; 
 7 }
 8 
 9 string f()
10 {
11 }
12 int main()
13 {
14 
15     int a=1;
16     int b=2;
17     cout<< "a address: "<<&a<<endl;
18     cout<<"b address: "<<&b<<endl;
19     
20     g(a,b);
21     
22 //    g(input,input);
23     
24     getchar();
25 return 0;
26 }

我们将参数参数改为int& 和 const char&引用,将两个整形变量传递给函数。发现结果和上面一样,同样产生了临时变量。

 

总结

在c++中当函数参数为引用时。

  • 如果传递的实参与函数参数类型不匹配,那么只有将参数类型定义为const,那函数将会产生一个临时变量,临时变量自动转化为函数参数类型。否者将报错。
  • 如果传递的实参是一个临时变量,那么就要将函数参数定义为const类型,否则也会出错

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中Session与Dictionary的用法发布时间:2022-07-14
下一篇:
ExpertCProgramming(C专家编程)读书笔记发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap