c++ - sizeof(void()) 是合法的表达式吗?

标签 c++ language-lawyer sizeof void

来自 [5.3.3/1] ,我发现:

The sizeof operator shall not be applied to an expression that has function or incomplete type

来自 [3.9/5]我发现:

Incompletely-defined object types and cv void are incomplete types

无论如何,对于 sizeof 不评估它的操作数,我会说 sizeof(void()) 是一个合法的表达式(实际上是 GCC 编译它和结果是1)。
另一边,来自 here , 在讨论 sizeof 时没有提到 void,既没有提到大小为 1 的类型,也没有在具有 实现定义的列表中 大小。

因此问题是:sizeof(void()) 是否合法?
是否保证 size 等于 1?
或者它是导致 UB 的合法表达,仅此而已?

最佳答案

void() 是一个函数类型(它是一个不带参数也不返回任何内容的函数),所以它在 sizeof() 中不是一个有效的类型。

关于c++ - sizeof(void()) 是合法的表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278200/

相关文章:

c++ - 如何存储 while 循环中产生的数据?

c++ - 在 Googletest 单元测试中禁用自动捕获 C++ 异常

c++11 - 为什么 constexpr 数据成员不是隐式静态的?

c - return(sizeof(array)) 给出意想不到的结果

c - union size 不是采用最大尺寸的数据类型?

c++ - 发生错误后执行的代码

c++ - 模板参数部分关于包扩展的一些困惑

c++ - 使用 C++17 排序的链式复合赋值仍然是未定义的行为?

c - 用整数表示 float

c++ - 鸟类调查项目在代码中遇到问题。如何像数据库系统一样存储数据