2013-11-20 68 views
3

有人能指向我在C++中的(官方)對象定義嗎?在當前的規範中,「對象」一詞使用了幾千次,但我似乎找不到解釋對象是什麼的部分或引用。對象在C++中的定義

這個不知何故基本問題的背景是a discussion I recently had with another user,誰對我的作用域枚舉類型的變量指針是否可以被視爲對象指針的問題感到驚訝。 根據他所說的,在C++中,每個變量都是一個對象,因此也是int i = 42;中的變量i。 無論如何,我可以找到其他來源指出C++中的對象是一個類的實例(這肯定是我多年前在學校教過的),這與我理解上面的假設相矛盾,即任何變量都是對象。或者有沒有解釋這個明顯的矛盾?

+1

在C和C++的說法中,實際上每個變量都被稱爲對象。沒有任何標準提及的「變量」。 – 2013-11-20 19:39:42

回答

8

引用不是對象。幾乎任何其他類型的實例都是。

這裏的定義,在1.8節中發現:

在C中的構建++程序創建,銷燬,參考,訪問和操縱的對象。 對象是一個存儲區域。 [注意:函數不是一個對象,不管它是否以對象的方式佔用存儲空間。 - 結束註釋]根據需要,定義(3.1),新表達式(5.3.4)或實現(12.2)創建對象。對象的屬性在創建對象時確定。一個對象可以有一個名字(第3章)。一個對象具有一個影響其壽命(3.8)的存儲持續時間(3.7)。一個對象有一個類型(3.9)。術語對象類型指的是創建對象的類型。一些對象是多態的(10.3);該實現生成與每個這樣的對象相關聯的信息,這使得可以在程序執行期間確定該對象的類型。對於其他對象,其中找到的值的解釋取決於用於訪問它們的表達式(第5章)的類型。

更有用的是在3.9p8的對象類型的定義:

對象類型是一個(可能是CV-合格音響ED)鍵入不是一個函數類型,而不是引用類型,而不是無效類型。

函數具有函數類型,但它們不是實例,並且從未存在void的實例。

爲了應對您的特定辯論,你需要對象指針的定義,從3.9.2p3:

類型的指針void或指向一個對象類型被稱爲對象指針類型。

事實證明,對象從未要緊,對象類型僅定義的定義。一個指向範圍枚舉的指針肯定是一個對象指針(它本身也是一個對象)。

當標準意味着限制類,結構或聯合類型的實例時,您會發現標準使用短語類對象

+0

巨大的+1爲3.9.8。 – 2013-11-20 19:42:46