C++中一般引用作形参和常引用作形参的问题

#include<iostream>

using namespace std;

int f(const int &a){return a;}

int g(int &a){return a;}

int h(int a){return a;}

int main(){

    int x=3;

    cout<<f(x)<<endl;

    cout<<f(3)<<endl;

    cout<<g(x)<<endl;

    //cout<<g(3)<<endl;//error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'

    //error: in passing argument 1 of `int g(int&)'

    cout<<h(x)<<endl;

    cout<<h(3)<<endl;

    }

 

常数没有地址,对于常数的引用必须是个const&,

同样的,如果x是个const的话,int g(int &a){return a;}也会报错:

 

结论:

如果不需改变形参的值又不用作参数传递(实参赋值给形参),用常引用作形参适应面最广:实参可以是变量也可以是常量。

如果需要改变形参的值,用引用作形参最合适:实参必须是变量不允许是常量。

如果不需改变形参的值又可以用作参数传递(实参赋值给形参),用普通变量作形参:多了传递参数的开销。

 

对比一般引用作形参和常引用作形参

一般引用作形参:

  1. 不用作参数传递(实参赋值给形参),节省开销,提高效率。
  2. 函数可以改变形参的值
  3. 实参不能是常量

常引用作形参有3个作用:

  1. 不用作参数传递(实参赋值给形参),节省开销,提高效率。
  2. 函数不能改变形参的值
  3. 实参可以是常量

猜你喜欢

转载自blog.csdn.net/juddi/article/details/82761397