Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] spiegazione funzione

    Salve,

    mi sono imbattuto nella seguente funzione:

    codice:
    void _function(const std::string& key, const std::string& value)
    {
    std::cout << key << value;
    }
    Dato che sono novizio delle funzioni in C++ volevo sapere:

    la parole "void" davanti al nome della funziona significa che non tornerà un risultato.

    con:

    const std::string& key in pratica passa una "stringa" non per valore ma per reference (&)? perchè hanno usato const ??

    grazie
    Alla batteria dai retta ballA

  2. #2
    Per specificare che la stringa in questione, pur essendo passata per riferimento (=>la funzione di fatto opera sull'oggetto che le è stato effettivamente passato, non su una sua copia), non verrà modificata. Il compilatore infatti, quando si lavora su oggetti const, consente solo di leggerne i campi (non di modificarli) e di richiamare i loro metodi const. Un metodo const infatti non può modificare l'oggetto in alcun modo, poiché può solo leggere i campi e richiamare altri metodi const.

    Insomma, quando si usa quella notazione si vuole di fatto farsi passare l'oggetto via reference per evitarne la copia (e la perdita di tempo che essa comporta), segnalando al contempo che l'oggetto non verrà modificato, esattamente come se ne venisse passata una copia.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ok, perfetto!

    un'ultima cosa, una funzione del genere ha cmq bisogno della dichiarazione di prototipo ad inizio file?

    codice:
    void _function(const std::string& key, const std::string& value);
    grazie
    Alla batteria dai retta ballA

  4. #4
    Certamente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao . . . Dipende da dove richiami la funzione. Se le chiamate alla funzione appaiono solo nel file cpp della definizione e prima della stessa allora dovrai inserire il prototipo prima di ogni chiamata alla funzione. Se la funzione viene richiamata in altri file cpp allora dovrai inserire in quest' ultimi (prima di ogni chiamata alla funzione) il prototipo della funzione (oppure inserire il prototipo in un header e inserire l' header in ogni file che richiama la funzione). Se invece le chiamate appaiono solo nel file della definizione della funzione e solo dopo la stessa, allora non avrai bisogno di inserire il prototipo . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  6. #6
    ok, vorrei continuare questa discussione per capire una cosa sui famosi file headers .h

    In pratica come devo suddividere file principale, funzioni e prototipi?

    ad esempio nei files header vanno solo i prototipi o anche le funzioni vere e proprie?

    in un file: my_header.h posso mettere il protoripo:

    codice:
    void _function(const std::string& key, const std::string& value);
    o devo mettere anche la funzione stessa?

    posso fare ad esempio:

    main.cpp // programma generale
    main.h // contenitore di prototipi etc..
    subs.cpp // contenitore di funzioni...

    va bene uno schema come questo? anche se ora che sono all'inizio mi è più congeniale fare tutto in un file!
    Alla batteria dai retta ballA

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da gianvituzzi
    ad esempio nei files header vanno solo i prototipi o anche le funzioni vere e proprie?
    Solo i prototipi.

    Ma scusa ... questi sono concetti da primi capitoli di un libro. Mi sembra necessario avere un testo di riferimento per l'apprendimento di un linguaggio come il C/C++ ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da gianvituzzi
    ok, vorrei continuare questa discussione per capire una cosa sui famosi file headers .h
    Oltre ad essere un argomento abbastanza rudimentale, che si trova nei primi capitoli introduttivi di qualsiasi libro sul linguaggio, questa discussione è stata aperta con un argomento specifico, quindi ci si deve attenere a quello; oltre a questo, il forum non è uno strumento adatto per l'apprendimento passo passo: non si possono tollerare discussioni chilometriche in cui qualcuno si fa spiegare un po' di tutto... se c'è un problema specifico, si parla di quello e si discute di tutto ciò che permette di arrivare ad una soluzione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    . . . inoltre su questo argomento sono state aperte molte (pure troppe) discussioni quindi basta una ricerca . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

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.