我正在查看AMD64 ABI,它似乎没有指定如何传递空类类型。对于空类成员函数,它似乎this
像往常一样传递,但对于空类,Clang 生成的代码似乎只是忽略了这个类。根据 AMD64 ABI,这是否正确?
问问题
262 次
1 回答
2
虽然尚不清楚确切的问题是什么,但关于 C++ ABI 是什么的答案非常清楚:
对于 C++ ABI,我们将使用 IA-64 C++ ABI 并适当地实例化它。该 ABI 的当前草案可在以下位置获得:
这说:
空类的传递与普通类没有什么不同。如果传入寄存器,则不得在构成该类的所有寄存器上设置 NaT 位。
单字节参数槽的内容是未指定的,被调用者可能不依赖于任何特定的值。在 Itanium 上,如果参数槽与寄存器关联,则不得设置关联的 NaT 位。
此处提供了另一个提示:
将返回空类类型的结果,就好像它是包含单个字符的结构一样,即 struct S { char c; };。返回寄存器的实际内容是未指定的。在 Itanium 上,不得设置相关的 NaT 位。
因此,应该将空类视为包含单个字符的结构,但从不使用该单个字符。
clang
当然,空类可能存在错误。虽然我对此表示怀疑,但公平地说。
于 2013-04-24T10:18:55.530 回答