#include<iostream>
using namespace std;
/**
* @brief p
* @return
* 函数返回值为引用:
1、当函数的 返回值的是一个局部变量引用的时候,
不可以成为其他的引用的初始值;
不能够作为左值使用。
2、如果返回 的是 静态变量和全局变量引用时。
可以成为其他的引用的初始值;
能够作为左值使用。
*/
/**
* @brief p
* @return
* 函数返回值为引用
*/
int p(){
int a=10;
return a;
}
//1、因为当函数返回的是一个引用,相当于返回了这个函数的地址。 它的底层实现是 int * const a; 相当于 int & a;
int & p2(){
int a=10;
return a;
}
int p3(){
int a=10;
return a;
}
/**
* @brief p
* @return
* 函数返回值为引用
*/
int j(){
static int a=10; //定义静态变量
return a;
}
int & j2(){
static int a=10;
a++;
return a;
}
int main12345(){
int a=10,b=20;
a=p(); //表示的是返回了的是一个值。
b=p2();//返回的是一个值。如果接受的是一个引用才会转化为 地址。引用的本质是一个地址。
int & c=j2(); //返回的是一个地址,相当于接受的是一个地址。 相当于 *p
cout<<a<<" "<<b<<" "<<c<<endl;
}
int main(){
j2()=10; //引用的返回值当左值 只有静态的全局变量的返回值可以做左值。
int & c=j2(); //引用的返回值当右值。
int a=j();
int b=j2();
cout<<a<<endl;
cout<<c<<endl;
}
结论:
1、在c语言中,const 修饰的变量是只读变量,是只读变量,有自己的内存空间。
2、在c++中,const 常量,有可能分配空间,有可能不会分配内存空间。
当const 修饰全局常量,并且需要在其他文件中使用,则会分配内存空间。
当&操作时,取const 地址时,修饰引用时,会分配存储空间。
当const 修饰引用时,const int &a=10,也会分配内存空间。