返回值 (C++)

可以适合于 64 位的标量返回值通过 RAX 返回,这包括 __m64 类型。非标量类型包括浮点数、双精度数和矢量类型,如__m128__m128i、 和__m128d以 XMM0 返回。返回到 RAX 或 XMM0 中的值的未使用位数的状态未定义。

用户定义类型可以从全局函数和静态成员函数通过值返回。若要把值返回 RAX,用户定义类型的长度必须为 1、2、4、8、16、32 或 64 位;没有用户定义的构造函数、析构函数或复制赋值运算符;没有私有或受保护的非静态数据成员;没有引用类型的非静态数据成员;没有任何基类;没有虚函数;没有数据成员也不符合这些要求。(这实质上是 C++03 POD 类型的定义。由于 C++11 标准中的定义已更改,我们不建议使用std::is_pod进行此测试。)否则,调用方有责任分配内存并为返回值传递一个指针作为第一个参数。然后,后续参数将向右移动一个参数。相同的指针必须在 RAX 中被调用方返回。

这些示例说明如何为具有指定声明的函数传递参数和返回值:

返回值 1 示例 – 64 位结果

  

返回值 2 示例 – 128 位结果

  

返回值 3 示例 – 指针的用户类型结果

     

返回值 4 示例 – 值的用户类型结果

     

请参见

参考

调用约定