Partilhar via


Valores de retorno (C++)

Um valor de retorno escalar que se encaixa em 64 bits é retornado por RAX — isso inclui tipos de m64.Tipos escalares não incluindo floats, duplicatas e tipos de vetor, como __m128, __m128i, e __m128d são retornados em XMM0.O estado de bits não utilizados no valor retornado em RAX ou XMM0 é indefinido.

Tipos definidos pelo usuário podem ser retornados pelo valor de funções globais e funções de membro estático.A serem retornadas pelo valor em RAX, tipos definidos pelo usuário devem ter um comprimento de 1, 2, 4, 8, 16, 32 ou 64 bits; Nenhum construtor definido pelo usuário, o destruidor ou o operador de atribuição de cópia; Nenhum membro de dados não estático particular ou protegido; Nenhum membro de dados não estático do tipo de referência; Nenhuma classe base; Não há funções virtuais; e não há membros de dados que também atenda a esses requisitos.(Isso é essencialmente a definição de C++ 03 tipo POD.Como a definição foi alterada no C++ 11 standard, não recomendamos o uso std::is_pod para esse teste.) Caso contrário, o chamador assume a responsabilidade de alocação de memória e transmitindo um ponteiro para o valor de retorno como o primeiro argumento.Os argumentos subsequentes são deslocados um argumento para a direita.O mesmo ponteiro deve ser retornado pelo receptor em RAX.

Estes exemplos mostram como parâmetros e valores de retorno são passados para as funções com as declarações especificadas:

Exemplo de resultado do valor de retorno 1 – 64 bits

  

Exemplo de resultado do valor de retorno 2 – 128 bits

  

Exemplo de valor de retorno 3 – resultado do tipo de usuário pelo ponteiro

     

Exemplo de valor de retorno 4 – resultado do tipo de usuário por valor

     

Consulte também

Referência

Convenção de chamada