#include<assert.h> usingnamespace std; //引用 voidvalSwap(int a, int b){ int temp = a; a = b; b = temp; } voidrefSwap(int& a, int& b){ //无空引用 int temp = a; a = b; b = temp; } voidptrSwap(int* a, int* b){ assert(a != nullptr && b != nullptr); //使用指针时,最好检查指针是否为空 int temp = *a; *a = *b; *b = temp; } intmain(){ int a = 10; int b = 20; cout << "Before swap: a = " << a << ", b = " << b << endl; valSwap(a, b); cout << "After valSwap: a = " << a << ", b = " << b << endl; refSwap(a, b); cout << "After refSwap: a = " << a << ", b = " << b << endl; ptrSwap(&a, &b); cout << "After ptrSwap: a = " << a << ", b = " << b << endl; return0; }
const 引用
1 2 3 4 5 6 7
intmain(){ int a = 10; int& ra = a; // r是a的引用 ra += 10; // 修改r的值,实际上是修改a的值 constint& rca = a; // rca是a的常量引用 // rca += 10; // 错误,不能通过常量引用修改值 }
同样的,当我们定义一个常变量const int a = 10;,是否可以使用int& b = a;来创建他的引用?
1
error C2440: “初始化”: 无法从“const int”转换为“int &”
很可惜,如果为常变量,那么他的引用需要也是常性引用
1 2 3
constint a = 10; constint& ra = a; cout << "a = " << a << ", ra = " << ra << endl; //a = 10, ra = 10