2014-01-20 53 views
6

我回復了對我的回答的評論:C job interview - casting and comparing,發現我找不到C++認爲「實現定義的行爲」的完整列表。我知道有這樣的事情有3個類別:未定義的行爲,實現定義的行爲和未指定的行爲;然而,大多數討論似乎圍繞未定義的行爲展開討論,並且在討論實現定義的行爲時,最多隻能給出一個例子。總的來說,我傾向於編寫大量代碼進入這個領域,我知道期望什麼樣的行爲;我仍然希望能夠對其有效性進行評論。我還想拋出那些,我認爲在運營社區中存在很多誤區,而這些誤區尚未定義,當時它們確實被平臺明確界定。C++中是否有實現定義的行爲的完整列表?

請注意,我並不是很感興趣的是給定的平臺如何選擇定義這樣的行爲,而是擁有一個屬於C++標準定義的「實現定義」類別的所有行爲的列表。

回答

9

標準本身定義的實現定義的行爲所有的情況下,draft C++ standard在提供話題和頁面的主題討論上,比如到底有Index of implementation-defined behavior

附加格式time_get :: do_get_date,689

對準,76

對準附加的值,76

實際上,每個編譯器都應該記錄所有實現定義的行爲以及它如何處理它們。例如,這裏是gcc's C++ Implementation-defined behavior sectiongcc's C Implementation-defined behavior。據我所知C++標準並不像C99草案標準未指定未定義行爲提供參考。因此,您將不得不求助於在文檔中搜索undefined未指定以查找所有實例。

C99 draft standard提供未指定未定義,和實施Annex J.1定義的行爲,J.2J.3分別的參考。

重要的是要注意,未定義的行爲可以指定爲由實現定義,但他們必須記錄它。在你的具體例子中,它確實看起來像你違反strict aliasing rules,但你的替代建議使用類型雙關聯是明確的,因爲C89

相關問題