More Effective C++ : Item 1: 指针和引用的区别

区别1:引用必须代表某个对象,即没有null reference;指针可以指向NULL,即有null pointer。

	// 禁止以下行为
	char *pc = NULL;
	char &rc = *pc;	// 让引用代表NULL指针的解引值。
	string str("Wuhan");
	string &rs1;	// 错误
	string &rs2 = str;	// OK

效率问题:

void printDouble(const double &rd)
{
	cout<<rd<<endl;
}

void printDouble(const double *pd)
{
	if (pd != NULL)
	{
		cout<<*pd<<endl;
	}
}

 

区别2:指针可以被重新赋值,指向另外一个对象;引用却总是指向最初指向的那个对象。

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("Beijing");
	string s2("Wuhan");

	string &rs = s1;
	string *ps = &s1;

	rs = s2;	// rs仍然代表s1,但是s1的值变成了s2的内容。
	ps = &s2;

	cout<<rs<<endl;	// Wuhan
	cout<<s1<<endl;	// Wuhan

	system("pause");
	return 0;
}


特殊情况:指针无法解决,必须使用引用解决。

	/*
		operator[]的返回值类型问题
	*/
	vector<int> v(10);

	// operator[]必须返回某种“能被当做assignment赋值对象”的东西
	v[5] = 10;
	// 如果operator[]返回pointer,上面的句子必须写成
	*v[5] = 10;

	// 总结operator[]应该返回一个reference

 

你可能感兴趣的:(More Effective C++ : Item 1: 指针和引用的区别)