C++ 引用,引用
本文主要記錄了C++中的引用特性,總結了一下代碼示例和錯誤。
對於引用,創建的時候就要說明引用的對象是哪一個,而且以後都不會修改這個引用的對象。引用就相當於一個變量的別名。
#include <iostream>
#include <string.h>
using namespace std;
void swapOne(char *&x,char *&y)//指針的引用
{
char *temp;
temp = x;
x = y;
y = temp;
}
void swapTwo(char **x,char **y)//指針的指針
{
char *temp;
temp = *x;
*x = *y;
*y = temp;
}
void swapThree(char *x,char *y)//指針的傳值(這種方法是不行的,相當於值傳遞)
{//有人會誤解這個,因為可能使用過 利用指針交換2個整數。這還是有差別的。
char *temp;
temp = x;
x = y;
y = temp;
}
int main()
{
char *ap = "Hello";//*ap的內容是H,*bp的內容是H
char *bp = "How are you?";
cout<<"ap: "<< ap << endl;
cout<<"bp: "<< bp << endl;
//swapOne(ap,bp);
//swapTwo(&ap,&bp);
swapThree(ap,bp);
cout<<"swap ap,bp"<<endl;
cout<<"ap: "<< ap << endl;
cout<<"bp: "<< bp << endl;
return 0;
}
#include <iostream>
using namespace std;
const float pi=3.14f;//常量
float f;//全局變量
float f1(float r)
{
f = r*r*pi;
return f;
}
float& f2(float r)//返回引用
{
f = r*r*pi;
return f;
//局部變量的引用返回(注意有效期),系統運行正常,但是結果會出錯。
/*float ff = f;
return ff;*/
}
int main()
{
float f1(float=5);//默認參數5,可以修改全局變量f=78.5
float& f2(float=5);//同上
float a=f1();
//float& b=f1();//f1()函數中,全局變量f的值78.1賦給一個臨時變量temp(由編譯器隱式建立),然後建立這個temp的引用b,對一個臨時變量temp引用會發生錯誤
float c=f2();
float& d=f2();//主函數中不使用定義變量,而是直接使用全局變量的引用。這種方式在全部4中方式中,最節省內存空間。但須注意它所引用的有效期。
//此處的全局變量f的有效期肯定長於引用d,所以安全。例如,將一個局部變量的引用返回。
d += 1.0f;
cout<<"a = "<< a <<endl;
//cout<<"b = "<< b <<endl;
cout<<"c = "<< c <<endl;
cout<<"d = "<< d <<endl;
cout<<"f = "<< f <<endl;
return 0;
}
#include <iostream>
using namespace std;
class Test
{
public:
void f(const int& arg);
private:
int value;
};
int main()
{
int a = 7;
const int b = 10;
//int &c = b;//錯誤:b為常量,但是C不是常量引用,正確的:const int &c=b;
const int &d = a;
a++;
//d++;//錯誤,d為常量引用,所以不能修改
Test test;
test.f(a);
cout << "a = "<< a <<endl;
return 0;
}
void Test::f(const int &arg)
{
//arg = 10;//常量不能修改
cout <<"arg = "<< arg <<endl;
value = 20;
}
/*
* 對於常量類型的變量,其引用也必須是常量類型的。
* 對於非常量類型的變量,其可以是非常量的。
* 但是,注意:無論什麼情況下,都不能使用常量引用修改引用的變量的值。
*/