Retourne la copie de relevé des valeurs

Je me pose des questions sur ce à cause de la question de la portée. Par exemple, considérez le code

typedef struct {
    int x1;/*top*/
    int x2;/*bottom*/
    int id;
} subline_t;



subline_t subline(int x1, int x2, int id) {
    subline_t t = { x1, x2, id };
    return t;
}

int main(){
    subline_t line = subline(0,0,0); //is line garbage or isn't it? the reference
    //to subline_t t goes out of scope, so the only way this wouldn't be garbage
    //is if return copies
}

Donc ma question est, sera le retour à la déclaration de toujours copier? Dans ce cas, il semble fonctionner, je suis donc amené à croire que le retour ne copie. Si elle ne copie, il copie dans tous les cas?

  • Il n'y a pas de références (comme dans & - une référence C++) pour subline_t dans votre code.
  • Envisagez-vous comme Java/C#, où chaque objet est une référence à quelque chose? Ce n'est pas le cas en C/C++ monde.
  • pour vous dire la vérité, j'ai tout simplement ne pas connaître le comportement de C/C++ lors du retour d'une variable dans la portée locale. Eh bien, je savais que ses beaux-faire avec des entiers par exemple, mais je savais aussi qu'il fallait être prudent dans certains cas (comme retournant un pointeur vers un objet instancié sur place.) Je ne connaissais pas le comportement que le C/C++ adopte pour la des structures.
  • prochaine fois que vous modifiez quelqu'code assurez-vous qu'il atleast compile .....
InformationsquelleAutor ldog | 2009-10-07