0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

谷歌編碼規(guī)范的前置聲明

typedef ? 來源:typedef ? 2023-01-04 09:42 ? 次閱讀

定義

A "forward declaration" is a declaration of an entity without an associated definition.

“前向聲明”是沒有關(guān)聯(lián)定義的實體聲明。

前置聲明的作用

避免重復(fù)定義變量

避免引入函數(shù)定義/聲明文件,從而函數(shù)文件發(fā)生更改時不會重新編譯依賴文件

解決循環(huán)依賴問題

優(yōu)點

節(jié)約編譯時間,前置聲明了一個類,那么只會編譯這個類,而不會編譯與之同屬一個文件的其它代碼。

處理兩個類互相依賴的問題,兩個類互相包含

//A.h
#include"B.h"
classA{Bb;};

//B.h
#include"A.h"
classB{Aa;};

缺點

前置聲明隱藏了依賴關(guān)系,頭文件改動時,用戶的代碼會跳過必要的重新編譯過程。

前置聲明可能會被庫的后續(xù)更改所破壞。前置聲明函數(shù)或模板有時會妨礙頭文件開發(fā)者變動其API。比如想改類的名稱,在大型項目中,可以采用兼容做法,將舊類名作為新類名的別名,但是別名不能作為前置聲明,所以需要修改類名則需要修改所有前置聲明了該類的地方,可能來自多個部門的開發(fā)人員用過,這就不太好處理了。

前置聲明來自 std:: 的 symbol 時,其行為未定義。

前置聲明的類因為只能使用指針或引用,當刪除一個前置聲明的類的指針時,此行為是未定義的。

很難判斷什么時候該用前置聲明,什么時候該用 #include。極端情況下,用前置聲明代替 #include 可能會悄悄地改變代碼的含義:

//b.h:
structB{};
structD:B{};

//good_user.cc:
#include"b.h"
voidf(B*);
voidf(void*);
voidtest(D*x){f(x);}//Callsf(B*)

若把#include換成前置聲明,由于聲明時不知道D是B的子類,test()中f(x)就會導致f(void*)被調(diào)用,而不是f(B*)。

建議

盡可能避免使用前向聲明。相反,請包含所需的頭文件。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6099

    瀏覽量

    104773
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    920

    瀏覽量

    54707
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223

原文標題:谷歌編碼規(guī)范的前置聲明

文章出處:【微信號:typedef,微信公眾號:typedef】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    安富萊C語言編碼規(guī)范

    所謂無規(guī)矩不成方圓。任何團隊,規(guī)范都是怎么也繞不開的話題。特別是在我們搞嵌入式C開發(fā)的,代碼規(guī)范乃是開發(fā)的重中之重。有太多的理由去做規(guī)范,因為每個人的代碼編寫喜好不同,代碼風格也迥然不同。每一個程序員心目中對好代碼都有自己的主見
    發(fā)表于 07-19 15:19 ?1227次閱讀

    AC97和HD聲卡規(guī)范簡介和前置音頻接口的連接

    AC97和HD聲卡規(guī)范簡介和前置音頻接口的連接英特爾在AC97音頻標準之后,又推出了HD(高保真)音頻標準。微軟的新操作系統(tǒng)Vista推出UAA音頻。這些音頻標準對機箱的前置音頻面板和接口都有各自
    發(fā)表于 11-25 17:02

    聲明提前和函數(shù)的聲明前置

    #hello,JS:03-02 聲明提前和立即執(zhí)行函數(shù)
    發(fā)表于 07-08 06:04

    嵌入式c語言編碼規(guī)范

    `學習嵌入式的同學應(yīng)該首先掌握嵌入式編碼規(guī)范,這樣才能更好的嵌入式系統(tǒng)。下面就從這幾個方面講解一下嵌入式c編碼規(guī)范。注釋風格、排版風格、頭文件風格、變量定義、宏定義、函數(shù)1 注釋風格1
    發(fā)表于 10-31 14:50

    嵌入式c語言編碼規(guī)范

    學習嵌入式的同學應(yīng)該首先掌握嵌入式編碼規(guī)范,這樣才能更好的嵌入式系統(tǒng)。下面就從這幾個方面講解一下嵌入式c編碼規(guī)范。注釋風格、排版風格、頭文件風格、變量定義、宏定義、函數(shù)1 注釋風格1.
    發(fā)表于 11-07 15:17

    Python編碼規(guī)范分享

    國際規(guī)范名:PEP 8變量名規(guī)范(標識符規(guī)范)字符串函數(shù)名小寫, 多個單詞用 _ 分隔開由字母數(shù)字或下劃線組成,首字母不能為數(shù)字 2. 不能為關(guān)鍵字 3. 建議使用駝峰命名法 搜字母小寫,第二個單詞
    發(fā)表于 10-27 07:15

    請問車載嵌入式軟件如何聲明符合MISRA語言規(guī)范?

    請問車載嵌入式軟件如何聲明符合MISRA語言規(guī)范?ISO26262對于軟件開發(fā)的要求是什么?
    發(fā)表于 12-27 07:07

    HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計- 隱私聲明

    HarmonyOS設(shè)計文檔中,為大家提供了獨特的隱私聲明,開發(fā)者可以根據(jù)需要直接引用。 開發(fā)者直接使用官方提供的隱私聲明內(nèi)容,既可以符合HarmonyOS原生應(yīng)用的開發(fā)上架運營規(guī)范,又可
    發(fā)表于 10-31 14:16

    華為的verilog編碼規(guī)范

    華為的verilog編碼規(guī)范
    發(fā)表于 11-01 08:41 ?41次下載
    華為的verilog<b class='flag-5'>編碼</b><b class='flag-5'>規(guī)范</b>

    嵌入式代碼之編寫規(guī)范

    嵌入式代碼編碼規(guī)范,用于規(guī)范自己的代碼,增強可讀性,非標準規(guī)范。最好能強制自己形成良好的編碼風格,有利于開發(fā)
    的頭像 發(fā)表于 04-26 15:21 ?5202次閱讀

    C++語言編碼規(guī)范詳細說明

    本文檔的主要內(nèi)容詳細介紹的是C++語言編碼規(guī)范詳細說明。
    發(fā)表于 01-07 16:19 ?14次下載
    C++語言<b class='flag-5'>編碼</b><b class='flag-5'>規(guī)范</b>詳細說明

    Java Script的編碼規(guī)范詳細說明

    本文檔的主要內(nèi)容詳細介紹的是Java Script的編碼規(guī)范詳細說明。
    發(fā)表于 01-10 17:17 ?7次下載
    Java Script的<b class='flag-5'>編碼</b><b class='flag-5'>規(guī)范</b>詳細說明

    AN-562:過濾ADV719x視頻編碼器內(nèi)部濾波器規(guī)范

    AN-562:過濾ADV719x視頻編碼器內(nèi)部濾波器規(guī)范
    發(fā)表于 04-21 10:23 ?8次下載
    AN-562:過濾ADV719x視頻<b class='flag-5'>編碼</b>器內(nèi)部濾波器<b class='flag-5'>規(guī)范</b>

    編碼規(guī)范的本質(zhì)是什么

    不知不覺間,代碼也寫了二十余載,我已成精了。借著過來人的身份和語氣,有一件事情我一直都特別喜歡吐槽:無論過去多少年,中國的嵌入式軟件開發(fā)者群體似乎一直對一個叫做“編碼規(guī)范”的東西趨之若鶩,仿佛
    的頭像 發(fā)表于 08-16 14:23 ?2227次閱讀

    嵌入式軟件之c語言編碼規(guī)范

    嵌入式軟件之c語言編碼規(guī)范
    發(fā)表于 10-28 18:13 ?28次下載