Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    [C++] Definizione di funzioni nella definizione di classe

    Stroustrup dice che le funzioni definite all'interno della definizione della classe sono considerate inline. Ovvero è indicata per funzioni di piccole dimensioni etc...

    Non ho capito se c'è una reale, implementativa corrispondenza o se la cosa è a livello logico.

    Cioè, quindi in fase compilativa si ha una implicita aggiunta del modificatore inline davanti alle definizioni di funzioni interne alla definizione della classe?

  2. #2
    dunque, quando si chiama una funzione viene salvato il contesto attuale nello stack
    di chiamata a funzione. Questa operazione comporta un costo.
    L'uso delle funzioni è indispensabile per fare i programmi
    in modo modulare, riusare lo stesso codice e bla bla bla, ma se queste sono particolarmente piccole (tipo un solo assegnamento), non conviene sprecare il costo di salvare il contesto.

    La direttiva inline espande la funzione:
    quando l'esecuzione arriva a quel punto invece di trovare l'indirizzo alla parte di codice che contiene la funzione
    trova direttamente le istruzioni della stessa. E' ovvio che se si dichiarassero inline
    tutte le funzioni , anche le + lunghe, il codice crescerebbe notevolmente in temini di dimensione.

  3. #3

    Re: [C++] Definizione di funzioni nella definizione di classe

    Originariamente inviato da keratox
    Cioè, quindi in fase compilativa si ha una implicita aggiunta del modificatore inline davanti alle definizioni di funzioni interne alla definizione della classe?
    Esatto, ma in ogni caso per chiarezza io lo aggiungo sempre.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Originariamente inviato da Mr.Bloom
    dunque, quando si chiama una funzione viene salvato il contesto attuale nello stack
    di chiamata a funzione. Questa operazione comporta un costo.
    L'uso delle funzioni è indispensabile per fare i programmi
    in modo modulare, riusare lo stesso codice e bla bla bla, ma se queste sono particolarmente piccole (tipo un solo assegnamento), non conviene sprecare il costo di salvare il contesto.

    La direttiva inline espande la funzione:
    quando l'esecuzione arriva a quel punto invece di trovare l'indirizzo alla parte di codice che contiene la funzione
    trova direttamente le istruzioni della stessa. E' ovvio che se si dichiarassero inline
    tutte le funzioni , anche le + lunghe, il codice crescerebbe notevolmente in temini di dimensione.
    Grazie per la reply ma non era questo ciò che mi interessava.

    Originariamente inviato da MItaly
    Esatto, ma in ogni caso per chiarezza io lo aggiungo sempre.
    Perfetto.

    Grazie

  5. #5
    Originariamente inviato da keratox
    Grazie per la reply ma non era questo ciò che mi interessava.



    Perfetto.

    Grazie
    Si me ne ero accorto con il post dopo il mio che ti citava,
    avevo trascurato la terza riga del tuo post originale e ho detto cose che probabilmente già
    sapevi. Beh poco male magari qualche lettore ne ha tratto giovamento.

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Sollevo una piccola questione:
    non conviene, quindi, dichiarare qualsiasi funzione come inline?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Originariamente inviato da XWolverineX
    Sollevo una piccola questione:
    non conviene, quindi, dichiarare qualsiasi funzione come inline?
    Come ho già detto otterresti un aumento considerevole dello spazio necessario per contenere
    l' eseguibile del tuo programma. Che io sappia questo è l'unico effetto nefasto.

  8. #8
    Oltre a questo (che è già un problema mica da ridere, considerando che ogni programma di una certa complessità fa tantissime chiamate a funzioni di vario genere) le funzioni inline non possono essere ricorsive (o meglio, lo possono essere ma soltanto fino ad un ridotto numero di ricorsioni e solo con artifici del compilatore).
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.