根據標準,在[expr.sizeof](5.3.3.2),我們得到:爲什麼參考類型的sizeof會給你類型的大小?
當施加到一個參考或引用類型,其結果是被引用類型的大小。
這似乎與事實引用一起去不明[dcl.ref(8.3.2.4):
它是不確定是否參考需要存儲
但是在我的語言中出現這種不一致的情況似乎很奇怪。無論參考文獻是否需要存儲,能否確定參考文獻使用的大小都不重要?看到這些結果似乎只是錯誤:
sizeof(vector<int>) == 24
sizeof(vector<int>*) == 8
sizeof(vector<int>&) == 24
sizeof(reference_wrapper<vector<int>>) == 8
什麼是定義想要sizeof(T&) == sizeof(T)
背後的原因?
我同意這裏有不一致,但這是如何定義引用類型。引用表示它們引用的對象。執行對象的操作應該與對該對象的引用執行相同操作的結果相同。如果C++有更好的聲明語法,我認爲如果有兩種不同類型的聲明會更好,比如'obj vector v;'和'ref vector vref;',我認爲這會更清楚,但是這個不是我們生活的世界。「 –
2014-10-29 13:09:03
」能夠確定參考使用多少尺寸不是很重要嗎?「 - 您可以確定它:由於引用**是**對象,因此它使用與引用對象相同數量的存儲。這裏沒有不一致。 – 2014-10-29 13:11:46
@TheParamagneticCroissant不一致之處在於引用的處理方式與其他類型修飾符不同(也因爲不能引用引用)。它可能不太可怕,但它*是不一致的。同樣,數組類型也有不一致之處。 – 2014-10-29 13:14:17