Opravdu konstantní data – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Opravdu konstantní data – C / C++ – Fórum – Programujte.comOpravdu konstantní data – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Cau
~ Anonymní uživatel
2 příspěvky
27. 6. 2011   #1
-
0
-

Ahoj, chtěl bych se zeptat, jestli je nějak možné zajistit, aby v případě, že funkce vrací referenci nebo ukazatel (pokud vrací hodnotu a dochází ke kopírování, tak je to docela jasné) opravdu nebylo možné změnit obsah pod vrácenou referencí či ukazatelem.

Například, i když vrací funkce typ "const int * const", je možné pomocí const_cast změnit typ na "int *" a následne bez problému zapisovat.

Díky

Nahlásit jako SPAM
IP: 88.102.27.–
Reklama
Reklama
nervak0
Věrný člen
27. 6. 2011   #2
-
0
-

Můžeš statická data definovat tak, aby je překladač umístil do segmentu jen pro čtení (jako třeba řetězcové literály). Pokud to překladač umožňuje, tak můžeš přímo určit, do jakého segmentu (sekce) se vybraná data umístí (pragmy v MSVC). Nebo můžeš za běhu použít funkce OS a změnit atributy paměťových stránek (VirtualProtect ve Windows). Ale pokud tomu nějak nazabráníš (ve stylu sandboxu), tak všechna aplikační data půjdou zase zpřístupnit pro zápis.

Každopádně je zbytečné se o něco takového pokoušet. Když to nepřetypuješ, tak ti překladač zařve, a když to přetypuješ, tak snad víš, co děláš.

Nahlásit jako SPAM
IP: 213.211.51.–
cau
~ Anonymní uživatel
2 příspěvky
27. 6. 2011   #3
-
0
-

Diky, rozumim. :-) Jeste bych se chtel zeptat, jak se zachovat v pripade, ze chci funkci, ktera vraci referenci na nejaky objekt ale onen objekt neexistuje. Dejme tomu jako v JS document.getElementById ale id by neexistovalo, funkce tedy nevrati NIC, ale presto se da vracene NIC pouzit, dokud nedojde k nejakemu problemu s pameti nebo pristupu kam se nema.

Jak by se mel v tomto pripade, kdy dojde ke vraceni NICEHO program chovat a jak to osetrit?

Dekuji

Nahlásit jako SPAM
IP: 46.135.64.–
KIIV+42
God of flame
27. 6. 2011   #4
-
0
-

To cau : null pointer

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
28. 6. 2011   #5
-
0
-

To cau : > Jeste bych se chtel zeptat, jak se zachovat v pripade, ze chci funkci, ktera vraci referenci na nejaky objekt ale onen objekt neexistuje.

Jsou různé možnosti:
1. V takovém případě vyhodit výjimku.
2. Vrátit referenci na speciální instanci.
2a. Speciální instance může být snadno identifikována, vede to však k nehezkému kódu, kdy se musí návratová hodnota kontrolovat (podobně jako null pointer v bodu 3)
2b. Speciální instance může mít vlastní implementaci všech metod. Např. takovou, že metody nedělají nic nebo vyhodí výjimku. Hodně záleží na konkrétní situaci
3. Změnit návratový typ na ukazatel a vrátit NULL pointer. Výhoda je jednoduchost, nevýhoda je nutnost kontrolování vrácené hodnoty (přitom ta kontrola proběhla už v té funkci).

Nahlásit jako SPAM
IP: 194.138.12.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 263 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý