1. 程式人生 > >推薦形參使用常量引用:void func(const T &);

推薦形參使用常量引用:void func(const T &);

highlight ons void 由於 turn con font amp return

一、聲明為const的原因:

  • 把函數不會改變的形參定義成普通的引用會帶給函數的調用者一種誤導,即函數可以修改它的實參的值;
  • 限制函數所能接受的實參類型,如不能把const對象、字面值或者需要類型轉換的對象傳遞給普通引用的實參。

舉例:對於附錄中的“find_char函數”,由於我們把其中的string類型的形參定義成普通的string&,故只能將find_char函數作用於string對象,對於下面這樣的調用,將在編譯時發生錯誤。

	find_char("Hello World", ‘o‘);

二、聲明為引用的原因:

避免拷貝,除了考慮效率問題,某些類型並不支持拷貝操作,此時只能使用引用形參

使用引用形參可返回額外信息

三、註意事項

const形參的頂層const將被忽略,故要註意不要如下重載函數:

void func(const int x)      // 頂層const
{
    cout << x << endl;
}
 
/*
void func(int x)
{
    cout << x << endl;
}
*/

解釋:因為頂層const將被忽略,我們傳入兩個func函數的實參可以完全一樣,這樣編譯器將不知調用哪個函數。

附錄:

【find_char程序】

#include <iostream>
#include <string>

using namespace std;

string::size_type find_char(string &s, char c)
{
	int ret = s.size();				// 最大索引值 + 1 
	return ret = s.find(c);
}

int main()
{
	string ss("hello");
	int first_pos = find_char(ss, ‘a‘);
	if (first_pos == -1) {
		cout << "Not find!\n";
	}
	else {
		cout << "first find at " << first_pos << endl;
	}
	return 0;
}

推薦形參使用常量引用:void func(const T &);