#include<iostream>
using namespace std;
/*
引用可以被const修饰,这样就无法通过引用修改数据,称为常引用(const必须写在&符号的左边)
*/
int main() {
int height = 20;
int age = 10;
const int &ref = age;//常引用
const int *p = &age;//常指针
//ref = 30;//无法通过ref修改age
//*p=30;//同上
cout << ref << endl;//可以访问
cout << *p << endl;
//【引用本身不能修改指向,指针可以】
//ref1不能修改指向,但是可以通过ref间接修改指向的变量(与不加const道理一样)
int & const ref1 = age;
ref1 = 30;
//ref2不能修改指向,不可以通过ref2间接修改所指向的变量
int const &ref2 = age;
//ref2 = 40;
//p1不能修改指向,可以利用p1间接修改所指向的变量
int * const p1 = &age;
//p1 = &height;
*p1 = 30;
//p2可以修改指向,不可以利用p2间接修改所指向的变量
int const *p2 = &age;
p2 = &height;
//*p2 = 30;
getchar();
return 0;
}
#include<iostream>
using namespace std;
/*
const引用的特点:
可以指向临时数据(常量、表达式、函数返回值等)
*/
int func() {
return 8;
}
int sum(const int &v1, const int &v2) {
return v1 + v2;
}
int sum(int &v1, int &v2) {
return v1 + v2;
}
int main() {
int age = 10;
int a = 1;
int b = 2;
//1、常量
const int &ref = 30;//无const不行
//2、表达式
const int &ref = a + b;//无const不行
//3、函数返回值
const int &ref = func();//无const不行
//4、不同类型的数据
const double &ref = age;//无const不行
//const引用作为函数参数,可以接受const和非const实参
//非const实参
int a = 1;
int b = 2;
sum(a, b);
//const实参
const int c = 1;
const int d = 2;
sum(c, d);
sum(10, 20);
//可以跟非const引用构成重载
getchar();
return 0;
}
//【区分】
//int age = 10;
//const double &rage = age;//不同类型
//age = 30;
//
//cout << age << endl;//10
//cout << rage << endl;//30
//
//
//int age = 10;
//const int &rage = age;//相同类型
//age = 30;
//
//cout << age << endl;//30
//cout << rage << endl;//30