【发布时间】:2017-01-09 17:33:48
【问题描述】:
从[5.3.3/1],我发现:
sizeof 运算符不得应用于具有函数或不完整类型的表达式
从[3.9/5]我发现:
不完整定义的对象类型和 cv void 是不完整的类型
无论如何,对于sizeof 不计算它的操作数,我会说sizeof(void()) 是一个合法的表达式(实际上GCC 编译它,结果是1)。
另一方面,从here 开始,在讨论sizeof 时没有提到void,既没有提到大小为1 的类型,也没有在具有定义的实现的列表中大小。
因此问题是:sizeof(void()) 是合法表达吗?
是否保证大小等于 1?
或者它是导致 UB 的合法表达,仅此而已?
【问题讨论】:
-
CppReference sizeof operator 说这是一个错误
-
GCC 曾经有(并且可能仍然有)扩展名
sizeof(void) == 1 -
我的 g++ 副本是这样写的:
warning: invalid application of ‘sizeof’ to a function type [-Wpointer-arith] -
也许应用程序会抑制错误/警告消息
-
@skypjack 答案是一样的——因此没有。
标签: c++ language-lawyer sizeof void