basic.types§3.9/ 9th,ISO标准C ++规范

时间:2011-01-24 09:50:06

标签: c++

指出ISO标准C ++规范:§3.9/第9点

  

对象类型是(可能是cv限定的)类型,它不是函数类型,不是引用类型,也不是void类型。

任何人都可以通过编程来解释这一点。(它是如何失败的)

2 个答案:

答案 0 :(得分: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运算符生成其操作数的对象表示中的字节数。

我无法对引用应用相同的推理,因为:

  

当应用于引用或引用类型时,结果是引用类型的大小。

但我们可以使用数组是对象

的序列这一事实
int& array[10];
// error: declaration of 'array' as array of references

这是一个错误,因为引用不是对象。现在开心? ;)

答案 1 :(得分:1)

你是否比以前更难?

C ++中有各种“东西”,例如函数,引用,指针,类等。几乎所有东西都有类型(例如变量)或类型(例如类),其中一些类型被称为“对象类型”。函数类型,引用类型和void不是“对象类型”。

请注意,void是一种特殊类型,它周围有几个特殊情况。特别是,它在函数返回类型中用来表示“无”,在用作void *(“指向未知类型的指针”)时表示“未知类型”。

“参考类型”应该是相当不言自明的:添加&amp;到现有类型以获取引用类型。 (你不能对所有类型都这样做。)

函数类型也与声音完全一样:函数的类型。例如:

void f();
int h(double);

这里,f的类型为void(),h的类型为int(double)。 (与大多数其他类型相比,函数类型看起来很奇怪。)