常見情況:將std :: string傳遞給函數foo(std :: string *)或foo(std :: string&);將tr1 :: shared_ptr傳遞給函數foo(tr1 :: shared_ptr * ptr)或foo(tr1 :: shared_ptr&ptr);通常,什么是良好實踐。我總是很困惑。最初,將所有內容作為引用傳遞似乎是一致的,但是不可能將Literals作為引用傳遞或將NULL作為引用傳遞。同樣,將所有內容都用作指針看起來不錯,但隨后我不得不擔心指針可能指向NULL并在該函數的開頭檢查這些條件。您認為以下代碼片段好嗎?#include <iostream>#include <vector>#include <map>#include <string>#include <tr1/memory>#include <algorithm>using namespace std;using namespace std::tr1;int main(){ map<string, shared_ptr<vector<string> > > adjacencyMap; vector<string>* myFriends = new vector<string>(); myFriends->push_back(string("a")); myFriends->push_back(string("v")); myFriends->push_back(string("g")); adjacencyMap["s"] = shared_ptr<vector<string> >(myFriends); return 0;}謝謝阿杰
3 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
引用更容易正確。
您使用的文字不是使用const引用嗎?您不能將臨時(由文字產生)綁定到非常量引用,因為更改一個臨時引用是沒有意義的。您可以將一個綁定到const引用。
特別是,當將參數傳遞給函數時,該函數將不會對其進行更改,并且它不是內置類型,請通過const引用傳遞。它的工作原理與按值傳遞大致相同,不同之處在于它不需要復制構造函數調用。
指針很有用,因為它們具有可以測試的保證無效值。有時這是無關緊要的,有時這是非常重要的。當然,通常不能通過指針傳遞文字,除非(在字符串文字的情況下)已經存在。
一些編碼標準說,非const引用不應該傳遞任何內容,因為在調用時它沒有提供參數可能由函數更改的指示。在這種情況下,將要求您通過指針傳遞。我不贊成這樣做,特別是因為編程工具使獲取函數簽名變得越來越容易,因此您可以查看函數是否可以更改參數。但是,在團隊或企業中工作時,樣式一致性比任何單個樣式元素都重要。
- 3 回答
- 0 關注
- 743 瀏覽
添加回答
舉報
0/150
提交
取消