作者Favonia (小西風最乖了*^^*)
看板C_and_CPP
標題Re: [問題] 關於C++ Standard中的一小節
時間Mon Aug 22 22:37:50 2011
※ 引述《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)