Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633

    [C++] i temporary objects sono const?

    Ciao a tutti,
    compilo con VC++ 6, il mio problema riguarda come da titolo i temporary objects, che credo siano const per default...ma cercando di verificarlo, ho ottenuto un risultato contrario, ecco il codice:

    codice:
    class X{};
    X anX(){ return X();}
    
    void f(X& x){}
    void g(const X& x){}
    
    void main (){
    	f(anX());
    	g(anX());
    }
    il codice compila perfettamente, mentre invece non dovrebbe (se i temporaries sono const) per la f()...che prende il riferimento ad un temporary object (quello che contiene il valore di ritorno della funzione anX)...
    Vorrei sapere se c'è qualcosa di sbagliato...o non so...se c'è qualche opzione di compilazione settata per default in VC++ che pone i temporaries a non-const (sto solo immaginando...)
    ...magari potreste compilare il codice con un altro compilatore?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    up
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    ho avuto modo di compilare il codice con dev-c++ e su questo compilatore le cose tornano alla normlità, in pratica non accetta la riga:
    codice:
    f(anX());
    come dovrebbe essere.
    Ma allora significa che VC++ non compila codice C++ standard!!
    giusto??
    c'è qualche opzione di compilazione che dovrei settare in modo da compilare codice standard? sto sbagliando qualcosa?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  4. #4
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Non tutti i compilatori sono strettamente aderenti allo standard ANSI.
    Ad esempio le vecchie versioni di gcc (gcc/egcs) sono molto meno restrittive di quelle nuove. Per questo motivo molto del codice che in passato si riusciva a compilare ora va riscritto per adeguarsi alle specifiche sempre più stringenti.
    Bisogna cercare nella documentazione del compilatore per verificare queste cose, comunque, e non prendere il risultato di uno o due compilatori come significativo: potrebbero etrambi consentire la compilazione di codice non conforme.
    Io proverei a compilare con gcc 3.3 il tuo codice, visto che lo stai scrivendo a livello didattico e vuoi imparare a scrivere correttamente.

    ChReAn
    -------------------

    Slackware 9.1 powered

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    mi passeresti il link da cui scaricare il compilatore (se ce l'hai)?
    dev.c++ 4 non è standard?

    controllerò meglio nella documentazione del compilatore, ma finora, cercando anche in rete, non ho trovato niente a riguardo per Vc++.
    grazie
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Originariamente inviato da standard
    mi passeresti il link da cui scaricare il compilatore (se ce l'hai)?
    dev.c++ 4 non è standard?

    controllerò meglio nella documentazione del compilatore, ma finora, cercando anche in rete, non ho trovato niente a riguardo per Vc++.
    grazie
    trovato il link
    cmq in dev-c++ 4 è integrato già il compilatore MinGW, che si basa sullo GNU GCC, giusto no? cmq dovrebbe compilare codice standard.

    grazie
    ciauzz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  7. #7
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Per il VC++ credo si debba guardare nell'MSDN e nella knowledge base MS, o in alternativa nei manualoni della confezione originale, ma non nascondo la difficoltà di reperire informazioni così dettagliate. C'è anche il servizio expert to expert di MS, al limite.

    Ti confermo quanto dici a proposito del DevC++ e, se ti serve un compilatore windows non troppo legato a fronzoli e "personalizzazioni", dovrebbe essere perfetto.

    ChReAn
    -------------------

    Slackware 9.1 powered

  8. #8

    Re: [C++] i temporary objects sono const?

    Originariamente inviato da standard
    codice:
    class X{};
    X anX(){ return X();}
    
    void f(X& x){}
    void g(const X& x){}
    
    void main (){
    	f(anX());
    	g(anX());
    }
    Secondo me, questo codice è assolutamente giusto, perchè X è oggetto.
    Hai ragione solo per caso quando X è Data Type, int per esempio.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633

    Re: Re: [C++] i temporary objects sono const?

    Originariamente inviato da gorazio_rm
    Secondo me, questo codice è assolutamente giusto, perchè X è oggetto.
    Hai ragione solo per caso quando X è Data Type, int per esempio.
    No, in realtà il codice era volutamente errato, e l'ho avevo scritto a livello didattico proprio per confermarmi il fatto che i temporary objects siano per default const.
    In particolare in quel codice viene creato un temporary object per contenere il valore di ritorno di anX, e viene distrutto non appena non serve più (alla fine della valutazione dell'espressione).

    Il problema è legato a VC++, per il quale il codice è (erratamente) corretto, come se in VC++ i temp-objs siano per default non-const.

    In dev-c++ (che compila codice standard) il problema viene segnalato e quel codice non passa.
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  10. #10

    Re: Re: Re: [C++] i temporary objects sono const?

    Originariamente inviato da standard
    No, in realtà il codice era volutamente errato, e l'ho avevo scritto a livello didattico proprio per confermarmi il fatto che i temporary objects siano per default const.
    In particolare in quel codice viene creato un temporary object per contenere il valore di ritorno di anX, e viene distrutto non appena non serve più (alla fine della valutazione dell'espressione).

    Il problema è legato a VC++, per il quale il codice è (erratamente) corretto, come se in VC++ i temp-objs siano per default non-const.

    In dev-c++ (che compila codice standard) il problema viene segnalato e quel codice non passa.
    Mi scusi, ma sono sicuro che sbagli. Quando chiami anX, il valore di ritorno è non oggetto X, ma la sua coppia. Voglio dire che sarai chiamato il costruttore per default, che crea la coppia di oggetto.
    Anchè ho provato il tuo codice in Visual Studio .NET (C++ 7.0), lavora perfettamente.
    Faccio le scuse per il mio italiano

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.