亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么時候在C ++中通過引用傳遞和何時通過指針傳遞?

什么時候在C ++中通過引用傳遞和何時通過指針傳遞?

C++
Helenr 2019-10-10 14:25:24
常見情況:將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引用不應該傳遞任何內容,因為在調用時它沒有提供參數可能由函數更改的指示。在這種情況下,將要求您通過指針傳遞。我不贊成這樣做,特別是因為編程工具使獲取函數簽名變得越來越容易,因此您可以查看函數是否可以更改參數。但是,在團隊或企業中工作時,樣式一致性比任何單個樣式元素都重要。


查看完整回答
反對 回復 2019-10-10
  • 3 回答
  • 0 關注
  • 743 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號