• [^] # Re: La methode n'est pas déclarée

    Posté par . En réponse au message Adresse d'un objet?. Évalué à 3.

    Non.

    Un nom de variable n'est qu'une référence à un objet en mémoire, au moment de la compilation. Le retour d'une fonction génère un objet en mémoire à une adresse fixe, et qui peut tout à fait être utilisé comme tel.

    Par contre, il se peut que le compilateur (cela dépend des versions, en fait) se plaigne car l'objet, temporaire, n'est pas forcément modifiable. Sémantiquement, cela reste incorrect car le prototype de la fonction imbriquée, lui, est formel.

    Avec g++ 3.3, j'obtiens :


    $ g++ refdef.c++ -o refdef
    refdef.c++: In function `int main()':
    refdef.c++:35: error: invalid initialization of non-const reference of type 'A&' from a temporary of type 'A'
    refdef.c++:22: error: in passing argument 1 of `void First(A&)'

    $ g++ -v
    Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.3.3/specs
    Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
    --infodir=/usr/share/info --enable-shared --enable-threads=posix
    --disable-checking --disable-libunwind-exceptions --with-system-zlib
    --enable-__cxa_atexit --host=i386-redhat-linux
    Thread model: posix
    gcc version 3.3.3 20040412 (Red Hat Linux 3.3.3-7)


    Avec


    /*
    ...
    */
    #include

    class A { public: int x; };

    void First (A & a) { a.x == 0; }

    A Second (void) { return A(); }

    int main (void)
    {
    First ( Second () );
    return 0;
    }