Keresés

Új hozzászólás Aktív témák

  • dabadab

    titán

    válasz m.zmrzlina #3943 üzenetére

    "1, Miért használ cím szerinti paraméterátadást, ha csak kiiratja a tömböt de nem változtat egyik eleme értékén sem?"

    Arra gondolsz, hogy void printArray(const std::array<int, 5> &n)?

    Mert kb. egymilliószor gyorsabb átadni egy pointert, mint létrehozni egy új tömböt, abba átmásolni az adatokat, majd a függvényhívás végén felszabadítani az egészet :) Egyébként const-ként adja át, az ott elég jól kifejezi, hogy nem fogja módosítani.

    "2. Mire való a függvény paraméterlistájában a tömb előtt a "const"?"

    Az azt mondja, hogy nem fogja módosítani, ami a gyakorlatban kb. azt jelenti, hogy csak az objektum const metódusait fogja meghívni és a tagváltozóinak sem fog értéket adni.

    "Egy kicsit feljebb a Passing std::array to function résznél azt írja, hogy azért kell mert a fordító így nem készít másolatot a tömbről"

    Ez mondjuk így hülyeségnek tűnik, hacsak valamit nagyon félre nem értek, amikor referenciát adsz át, akkor se így, se úgy nem készít belőle másolatot.

    Azt esetleg el bírom képzelni, hogy valamelyik fordító a void printArray(const std::array<int, 5> n)-ből csendben magától void printArray(const std::array<int, 5> &n)-t csinál és erre gondolt a költő.

  • cattus

    addikt

    válasz m.zmrzlina #3943 üzenetére

    Ha nagyon nagy méretű objektumokat érték szerint adsz át, akkor a lemásolásuk jelentős késleltetést vonhat maga után (értsd: lassú lesz a program). Emiatt használnak referencia szerinti átadást. Ilyenkor ugye alapesetben a függvény módosíthatná a kapott objektumot, emiatt használnak const-ot, hogy ne legyen rá lehetősége.

Új hozzászólás Aktív témák