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
Fórum › C / C++
Opravdu konstantní data
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áš.
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
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).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Když uživate napíše data do formuláře, jak dostat ty data do title? — založil Starý chábr
Data Scientist / Statistik / Data Mining Professional — založil Profinit EU
BASCOM : data(1), &HFF snížit o jednu jednotku dolů na data(1),… — založil grantorino
Hledáme parťáka Big Data Engineera - Big Data na platformě Hadoop — založil Profinit EU
For cyklus s opravdu hodně opakováním — založil Marek
Moderátoři diskuze