2011-01-24 31 views
1
從ISO標準C

點++規範:§3.9/第九點basic.types§3.9/第九點,ISO標準C++規範

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

任何一個都能夠解釋這一點與編程。(它是如何失敗的)

回答

1

你使其更難比你有什麼打算?

在C++中有很多「事物」,比如函數,引用,指針,類等等。幾乎所有東西都有一個類型(例如變量)或者是一個類型(例如類),其中一些類型被稱爲「對象類型」。函數類型,引用類型和void不是「對象類型」。

請注意,void是一種特殊類型,其周圍有幾個特殊情況。特別是,它在函數返回類型中用來表示「無」,當用作void *(「指向未知類型的指針」)時表示「未知類型」。

「引用類型」應該是不言而喻的:將&添加到現有類型以獲取引用類型。 (所有類型都不能這樣做)。

函數類型也完全如它的聲音:函數的類型。例如:

void f(); 
int h(double); 

這裏,f的類型爲void(),h的類型爲int(double)。 (函數類型相比於大多數其他類型的看起來很怪異。)

4

任何一個可以能夠與編程來解釋這一點。(它是如何失敗的)

彎腰向後,我想出了以下程序:

std::cout << sizeof(bool(int)) << std::endl; 
// invalid application of 'sizeof' to a function type 

std::cout << sizeof(void) << std::endl; 
// invalid application of 'sizeof' to a void type 

這是因爲:

sizeof operato r得到其操作數表示的對象中的字節數。

當施加到一個參考或引用類型,其結果是被引用類型的大小:

因爲我不能應用相同的推理引用。

但我們可以用事實陣列對象的序列:

int& array[10]; 
// error: declaration of 'array' as array of references 

這是一個錯誤,因爲引用不是對象。現在開心?;)

+0

可以請你用對象類型 – 1User 2011-01-24 10:36:31