我見過several assertions是C89和C++ 03定義嚴格別名規則。但是,我無法在標準中找到那個特定的位。我的理解是C99中增加了嚴格的別名規則。待辦事項C89或C++ 03定義嚴格別名規則?
回答
的C++ 03標準具有以下下§3.10 [basic.lval] p15
:
如果一個程序試圖通過其它的左值比以下類型之一來訪問對象的存儲值的行爲是未定義48):
- 動態類型的對象,
- 動態類型的對象的CV-合格版本,
- 一個類型在所述簽名或對應於動態型的對象的無符號類型,
- 與對象的動態類型的cv限定版本對應的有符號或無符號類型的類型,
- 在其成員中包括上述類型之一的聚合或聯合類型(包括遞歸,a成員的子集或包含的聯合),
- 類型是(可能是cv合格的)基類類型的對象的動態類型,
- char或unsigned char類型。
腳註:
48)該列表的目的是,以指定的對象可以或可以不被混疊的那些情況。
This site也列出了其他標準中的部分。
檢查這是因爲我明確地選擇了問題中的答案。 –
本文存在於C89,§3.3表達式:
一個目的應具有其存儲 值僅由左值訪問的 有以下幾種類型中的一種:
對象的聲明類型,
合格版本的聲明 類型的對象,
一個類型在所述簽名或相應於
聲明類型對象的 無符號類型,在所述簽名或相應於一個
合格版本 無符號類型的類型聲明類型對象的 ,的聚集或聯合類型 包括前述
之一其成員之間的類型(包括, 遞歸,一個
子聚集的成員或包含聯合),或字符類型。
違反「應」約束導致未定義行爲,所以一組允許的別名規則可以從這個文本導出。
3.3 C89,3.10/15在C++ 03。
兩者有一個腳註,話,效果「此列表的意圖是表示當物體可能會或可能不會被混疊」。
愚蠢的CTRL-F! (我搜索了「別名」一詞!誠實!) –
- 1. C++嚴格別名規則和成員指針
- 2. C++別名規則
- 3. __restrict是否允許忽略嚴格的別名規則?
- 4. Typescript嚴格別名檢查
- 5. Emberjs待辦事項列表。無法創建新的'待辦事項'
- 6. C99嚴格的混淆規則(GCC)
- 7. 待辦事項JavaScript函數
- 8. 解引用類型指針會打破嚴格別名規則[-Wstrict-aliasing]
- 9. Joomla待辦事項列表
- 10. 無法運行Redux的待辦事項例如(待辦事項陣列未定義)
- 11. 這是嚴格別名規則中斷的有效代碼修復嗎?
- 12. 使用SQLite的待辦事項列表
- 13. 別名或自定義基於核心或規則的Coref在斯坦福NLP
- 14. 待辦事項列表示例
- 15. Android待辦事項列表
- 16. web.py待辦事項列表()
- 17. 待辦事項的rsync
- 18. Knockout.js待辦事項列表
- 19. 待辦事項繼承權
- 20. IntelliJ排序待辦事項
- 21. jQuery待辦事項列表
- 22. 警告!解引用打字指針會打破嚴格別名規則[-Wstrict-aliasing]
- 23. 通過引用訪問是否違反了嚴格的別名規則?
- 24. GCC警告「解引用類型指針會破壞嚴格別名規則」
- 25. Eslint規則嚴格falsy檢查
- 26. 設置嚴格的密碼規則
- 27. JQuery的待辦事項清單項目
- 28. 定義規則
- 29. AS3 - 待辦事項列表結構
- 30. 浮點數和嚴格的別名
我引用了C++ 03 3.10/15的全部內容,其中列出了有效形式的別名,[在另一個問題的答案](http://stackoverflow.com/questions/4807643/container-covariance-in -c/4807726#4807726)。 –