引用作為函式返回值的一點思考

2021-09-08 20:20:23 字數 933 閱讀 5458

本篇文章的關注點是引用作為函式返回值,網上類似很多,具體可參考引用作為函式返回值的優缺點。這裡,我想寫下自己的想法。

在c++中,引用變數必須要初始化,否則會有編譯錯誤。這裡指的初始化,一般變數賦值初始化。如果是通過函式返回值來初始化,那就要好好考慮下。

以獲取字型資訊場景為例子:在啟動時,通過讀取字型配置檔案來獲得字型資訊,儲存在m_vlogfont。外部通過getfont介面函式來獲得字型資訊,每乙個id對於一種字型,介面函式大致實現如下:

const logfont& getfont(int nfontid)

}// 外部使用

const logfont& fontinfo = getfont(font_id);

問題一:通過函式返回值來定義的引用,如何判斷其有效性?

按照以往的知識,引用變數一旦初始化,之後就不能再改變。通過函式返回值也算是初始化,在這種情況下,如果引用無效,比如傳入乙個很大的fontid,在編譯階段是無法發現錯誤,只有在執行階段,會報讀取訪問衝突的錯誤。

解答:這種情況下,在編譯期間是無法判斷其有效性的,在執行時可判斷。

問題二:如果出現上面的情況,如何預防?

這裡有兩種解決方案,以getfont為例子:

在if的else分支中,加上assert斷言,在除錯階段發現問題。

在if的else分支中,加上出錯處理,即獲取不到,則返回預設字型資訊。

這兩種處理方式,在實踐中都有應用,不同方式對應的場景不一。比如,第二種方式的應用場景是字型配置資訊異常。如果不這麼做,會因一處配置資訊異常,導致整個軟體無法運作。

小結:工具類函式的返回值需要仔細考慮異常情況,盡量做到異常情況對外部暴露,由外部去處理。同時,此類函式注釋撰寫要規範,不要注釋說明和內部實現不一致,給使用者和後來者挖坑。

「引用作為函式引數」與 「引用作為函式返回值」

一 引用作為函式引數 作為函式引數時引用有兩種原因 1 在函式內部會對此引數進行修改 2 提高函式呼叫和執行效率。關於第一點,都知道 c 裡提到函式就會提到形參和實參。如果函式的引數實質就是形參,不過這個形參的作用域只是在函式體內部,也就是說實參和形參是兩個不同的東西,要想形參代替實參,肯定有乙個值...

將引用作為函式返回值

要以引用返回函式值,則函式定義時必須遵循以下格式 型別識別符號 函式名 形參列表及型別說明 可見,以引用返回函式值,定義函式時需要在函式名前加 引用作為函式的返回值時,函式的返回值可以理解為函式返回了乙個變數 事實上,函式返回引用時,它返回的是乙個指向返回值的隱式指標 因此,值為引用的函式可以用作賦...

引用作為函式引數返回值

說明 1 以引用返回函式值,定義函式時需要在函式名前加 2 用引用返回乙個函式值的最大好處是,在記憶體中不產生被返回值的副本。例如 include float temp 定義全域性變數temp float fn1 float r 宣告函式fn1 float fn2 float r 宣告函式fn2 f...