abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:44 | Nová verze

    Programovací jazyk Python byl vydán v nové major verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    včera 22:33 | Zajímavý projekt

    BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.

    ❗Červivý Hřib krade❗ | Komentářů: 7
    včera 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 8
    včera 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 11
    včera 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 11
    včera 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 2
    včera 03:22 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Komunita

    Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.

    Ladislav Hagara | Komentářů: 1
    8.10. 21:33 | Zajímavý projekt

    ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 0
    8.10. 21:00 | Zajímavý software

    ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 9
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2822 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: C++ vrácení konstatního textu z funkce

    20.11.2010 15:31 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    C++ vrácení konstatního textu z funkce
    Přečteno: 970×
    Po delší době se zabývám něčím „základním“ a narazil jsem si na záležitost vrácení konstantního textu z virtuální fce.

    Tento příklad asi není moc super s ohledem na bezpečnost
    virtual const char* getText() const
    {
      const char *name = "text";
      return name;
    };
    
    Tento už je asi lepší (nebo ne?)
    virtual void getText(std::string &name) const
    {
      name = "text";
    };
    
    ale mě by zajímalo jak se takové věci dělají obecně „správně“.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

    Řešení dotazu:


    Odpovědi

    20.11.2010 16:07 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Zkuste si přeložit a spustit tento krátký prográmek:
    #include <stdio.h>
    
    void x() {      const char *abc = "abc"; printf("x: %p/%p\n", &abc, abc); }
    void y() { x(); const char *abc = "abc"; printf("y: %p/%p\n", &abc, abc); }
    void z() { y(); const char *abc = "abc"; printf("z: %p/%p\n", &abc, abc); }
    
    int main()
    {
    	z();
    	return 0;
    }
    
    To by Vás mělo přesvědčit, že tohle..
    virtual const char* getText() const
    {
      return "text";
    };
    
    ..je v naprostém pořádku :-)
    20.11.2010 16:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Nepochybuji o funkčnosti…, získáte tím ale ukazatel na místo, na které se můžete pokusit zapsat, tj. není to defensivní kopie.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    20.11.2010 16:29 mrk
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce

    A kde je problém? Veď tá funkcia vracia const char*, čiže pointer na konštantné pole znakov. (aj keď, dá sa to obísť pomocou const_cast)

    A prečo nepoužijete návratový typ const std::string (hodnota, nie referencia)? std::string sa riadi zásadou copy-on-write, čiže samotné vytvorenie kópie je lacné, akurát sa možno zbytočne pracuje s počítadlom odkazov.

    20.11.2010 17:23 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Jak řekl mrk, pokusit zapsat se můžete, ale bez const_cast to nepůjde a to je jiná kapitola. A pak, kus kódu který jsem napsal není o prokázání funckčnosti ale správnosti :-)
    21.11.2010 11:08 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Trošku jsem se snažil lépe vysvětlit vo co mi go níže.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    23.11.2010 01:13 vlastagf | skóre: 11
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Nevraci to nahodou pointer na lokalni promennou?
    23.11.2010 01:19 vlastagf | skóre: 11
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Resp. co vlastne vola?
    return "text";
    
    Alokuje se dynamicke pole nebo ne?
    23.11.2010 01:27 Jirka P
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Ne, proboha!

    return "text";

    vrací ukazatel na globální, konstantní pole.
    20.11.2010 19:51 __dark__
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Oba příklady jsou správně, ale dělají neco jiného. V prvním příkladu vracíš ukazatel na "text", v druhém vytváříš jeho kopii.
    21.11.2010 10:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Vím co ty fce dělají a ten rozdíl mi jde, ... je možné napsat další roj variant (neřeším správnost s ohledem na syntaxi a práce s pamětí :)).
    Zajímalo mě jak se to bezpečně reší v praxi v roce 2010 :).
    Varianta s char * umožní získat ukazatel do konstanty.
    #include <iostream>
    const char* getText() { return "Text"; }
    int main()
    {
      std::cout << getText() << std::endl;
      char *ch = (char *) getText();
      ch[0] = 't';
      std::cout << getText() << std::endl;
      return 0;
    }
    
    ... že to skončí s Segmentation fault, je jiná záležitost.

    2. Příklad již dává defensivní kopii, takže asi OK, ale zas práce s tím může být pracnější (víc psaní).
    Starší kódy jsou plné vracení ukazatele na konstatní řetězec(char[]).
    Vzhledem k tomu, že to má být součástí veřejného rozhraní, tak jsem chtěl zadiskutovat, jak je to správné řešit s ohledem na správný/bezpečný návrh a pohodlné použití.
    Ono asi bude rozumná, mnou úmyslně neuvedená varianta a zde vzpomenutá varianta s vracením std::string hodnotou.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    21.11.2010 12:24 jekub
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    char *ch = (char *) getText();

    1. chcete pouzivat c++, takze kdyz tak const_cast

    2. je to vedome poruseni restrikce const char *. Fce vracejici ukazatel na konstantu je zcela v poradku. Ostatne pokud budete chtit, muzete zpusobit pad aplikace i v pripade navratu std::string hodnotou...
    21.11.2010 14:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    ad. 1 - Já ano(i když si tím někdy nejsem jistý - jestli chci :) ), ale jak jsem psal jedná se o rozhraní a nevím kdo jak jej bude používat :)
    ad. 2 - jo je to vědomé porušení a asi by to mělo stačit k tomu, že tím pádem je to „dostačující“ argument proto se tím nezabývat
    Možná jsem to měl napsat nějak jinak, mě hlavně zajímá, která s variant je nejrozumnější, víceméně nenavádějící k jednoduchým chybám a obecně přijatelná.
    Osobně preferuji bod 1. tj. vrácení ukazatele na konstantu, bo je to takové „milé“ a historicky mi vlastní :).
    Nicméně setkávám se v novějších zdrojích s jinými variantami, což se dřív tak nevidělo, a protože fčul je rozhodnutí na mě, ale nejedná se o vnitřní záležitost, ale o veřejné rozhraní, tak jsem raději položil tento dotaz abych se něco dozvěděl.

    Já vím, že v zásadě jde o nic a jsou daleko důležitější věci, ale ve své podstatě mezi některými variantami nevidím rozdíl co do funkčnosti/použitelnosti a chtěl jsem vědět proč to někdo dělá tak a někdo tak --- ty důvody mě zajímají, že by žádné nebyly?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    21.11.2010 20:14 jekub
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Ty duvody jsou podle me tehoz druhu jako rozhodovani mezi tim, zda se ta funkce v prikladu bude jmenovat getText, GetText nebo treba get_text. Hlavni podle me je, aby byl styl v ramci Vaseho rozhrani konzistentni.
    21.11.2010 19:56 biolog
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Obě dělají zhruba totéž.

    Použít obyčejný Cčkový cast v C++ je možné a podporované. Ale C++ umí jemnější casty, lépe z nich lze poznat, co autor kdysi zamýšlel (jen odstranit const-nost, jen přetypovat na potomka a ne z čehokoliv, ...). Samozřejmě každé přetypování je určité nebezpečí. Když někdo udělá to co v příspěvku #6, dobře mu tak.

    Chytré string používají copy-on-write a počítání referencí (nebo kombinaci s eager-copy). Pokud by byl ten vracený string velký, vytvářela by se pokaždé nová kopie. (Chytré stringy nemohou zvyšovat počitadlo referencí u char* stringu, protože ho nemá.) V tom případě je místo statického C stringu mít statický std::string a vracet jeho (líné) kopie.

    Varianta getText(std::string &name) se hůř používá, protože volající musí mít lokální proměnnou na něco, co ho možná nezajímá. Třeba by chtěl zavolat foo(getText()) a nemůže.

    Když tu druhou variantu upravíte aby vracela std::string (bez &), a ne void, budou skoro stejně dobré. Ledaže by volající preferovali CString (MFC), QString (Qt), wxString (wxWidgets), GString (GTK) nebo bůhvíco.
    21.11.2010 20:16 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    A otočme to, co by jste použil v tomto případě a proč - snad to z někoho vytáhnu :).
    (Vracíme ASCII řetězec „vyšší“ typy nepřichází v úvahu, na výběr je jen char* nebo std::string).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    22.11.2010 18:38 martyone | skóre: 18
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Pokud teda jde jen o styl, upřednostnil bych API vracející nějaký chytrý string. Práce s hodnotou je pohodlnější, nepotřebuje komentáře ohledně zodpovědnosti o dealokaci, a implementace se sdílenými daty nepřinášejí zas tak velké zatížení.
    23.11.2010 18:06 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    ja bych vracel "char const *", pokud nemas duvod vracet std::string. Precejenom kdyz z toho uzivatel bude chtit udelat string, tak to neni problem a bude to efektivnejsi

    btw. tim copy-on-write o kterym pise "biolog" bych si nebyl tak jistej. Pokud vim tak vetsina STL implementaci to nepouziva protoze to zpusobuje problemy u multithread aplikaci...
    23.11.2010 20:01 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C++ vrácení konstatního textu z funkce
    Děkuji všem, rozhodl jsem se zůstat při starém tudíž, vracet
    const char *
    z důvodů:
    • Dicki sem to tak dělal, nebyl-li ke změně nějaký vyšší důvod
    • Je to takové jednoduché, z mého pohledu „průhledné“
    • Nikdo nenamítl nic, co by to nějak shodilo
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

    Založit nové vlákno • Nahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.