c++对c的加强----引用

  • 时间:
  • 浏览:
  • 来源:互联网

C语言中 :传值 VS 传地址
传实参变量名,只能使用实参的值,不能修改;
传实参变量的地址,既能使用也能修改;
当需要修改实参变量的值,传实参变量的地址;
当只使用实参变量的值,传实参变量名。

引用:解决函数指针传参和返回值的问题
//引用的作用:函数形参和返回值
引用语法作用:给变量起别名,操作引用相当于在操作引用所绑定的变量。
注意事项:定义引用必须绑定变量;一旦绑定一个变量就不能再绑定其它变量。

#include<iostream>
using namespace std;
int main()
{
   int count =5;
   int &r_count = count;
   r_count++;
   count++;
   
   cout <<count <<endl;
   count <<r_count <<endl;
   
   return 0;
  } 
#include<iostream>
using namespace std;
void swap(int &a,int &b)//引用作为函数形参,解决了传值和传地址的问题
{
  int temp=a;
  a=b;
  b=temp;
 }
  
int main()
{
   int a=5;
   int b=6;
   swap(a,b);
   cout << "a=" << a <<"b="<< b<<endl;
   return 0;
  } //结果是a=6 b=5

如果我们引用时只想使用,不想修改,可以使用const;

void swap(const int &a)//a:常引用:只能使用不能修改其绑定的值。
int & getNum(int a)//引用作为函数返回值
{
   int temp =a +1;
   return temp;
}
int  getNum(int a)
{
   static int temp =a +1;
   return temp;
}

//C语言中返回值的注意事项:不要返回局部变量的地址或者指针
#include<iostream>
using namespace std;
int main()
{
   int i=5getNum(i)=29getNum(i)=20;//函数调用做返回值:修改返回的值
   
   return 0;
  } 

//引用是否占用额外内存空间? YES
编译器优化:不将这个空间展示给开发人员,不能操作这段空间。“新的数据类型”
//c++11 左值引用和右值引用
//左值:可以被修改的值,可以作为左值(可以取地址的可以作为左值)
/右值:不可以被修改的值,可以作为右值(不可以取地址的可以作为右值)
//左值引用:只能绑定左值 int&
//右值引用:只能绑定右值 int&&(对象移动)

 #include<iostream>
 using namespace std;
 int main()
 {
     int num =5;
     int &l_num=num;
    // int &&r_num=num;不能绑定
    int &&r_num =5;//移动构造函数 移动拷贝复制运算重载
 }

std::move()可以将左值转化成右值
//引用 VS 指针
1、指针是变量,引用时别名,引用解决函数传参地址选择问题;
2、指针占用内存空间,引用实际上也占用内存空间(编译阶段确定,并且隐藏)
3、指针有多级指针,引用有左值引用和右值引用;
4、指针不安全,容易造成内存泄露,引用不会

本文链接http://www.dzjqx.cn/news/show-617250.html