看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《u941716 (WSChin)》之銘言: : C++ Standard的3.5.10節看不太懂,原文如下: : After all adjustments of types(during which typedefs(7.1.3) are replaced by : their definition), the type specified by all declarations referring to a given : object or function shall be identical, except that declarations for an array : object can specify array types that differ by the presence or absence of a : major array bound(8.3.4). A violation of this rule on type identify does not : require a diagnostic. : 我的翻譯如下: : 在所有的型別調整之後(在typedefs被他們的定義取代後),所有宣告所特徵的型別若是 : 參照到給定的物件或函式就必須相同,除非是宣告的物件陣列的型別會因為major array : bound的有無而改變。此規則的違背並不需要丟出診斷訊息。 : 可是.....我自己對於內容還是一知半解,有強者大大可以說明一下這小節的內容嗎? : 感謝! 假設你在看 C++03 3.5/10 (3.5 段落 10). 這段話有幾個重點,首先是 | After all adjustments of types (during which typedefs(7.1.3) are | replaced by their definition) .... 就是說編譯器會(而且必須)對表面上的型態動點手腳。例如你可以參考 8.3.5/3 看看怎麼對函數型態動手腳。然後 typedefs 相對來說算清楚的(?),而且他還告訴 你要參考哪個章節 xD | .... the type specified by all declarations referring to a given | object or function shall be identical, .... : → u941716:會不會是extern variable和他的entity型別要一樣? 08/22 21:47 並不只有 extern. 請參考 3.5/2, 所有指到同一個東西的宣告都要是同一個型態, 而 extern 只是造成這種狀況的一個方法。像函數宣告預設都有外部連結性(external linkage),根本不用加 extern. 只要有連結(linkage)就有可能發生兩個「名字」指 到同一個東西的狀況。 | .... except that declarations for an array object can specify | array types that differ by the presence or absence of a major | array bound(8.3.4). 這意思是說 int[][20] 和 int[10][20] 指到同一物件沒有問題。3.9/7 有一些相 關資訊可以參考。 | .... A violation of this rule on type identify does not require | a diagnostic. 這是給編譯器(或實作)的特權。一般來說違反規則時編譯器要產生錯誤訊息;這 句話允許編譯器隨便亂實作(如果程式設計師違反這條規則)。 : 看了兩天還是不懂TT 我覺得你很厲害!希望這篇對你有幫助。 === 希望內容沒打錯 orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.39 ※ 編輯: Favonia 來自: 140.112.30.39 (08/22 23:41)
u941716:真強者!我會詳細看看你建議的章節,謝謝。 08/23 01:21
u941716:對了,我的standard版本是目前的draft 08/23 01:26
我也只有網路上免費可以抓到的版本 xD
u941716:大致上懂了,再次謝謝你! 08/23 01:30
※ 編輯: Favonia 來自: 140.112.30.39 (08/23 03:34)