2011-01-24 50 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