C++-ban a stringliterálok sem tárolódnak el a memóriában, hanem a processzor közvetlenül megkapja ezeket az értékeket, vagy ez az állítás csak az egyszerű típusú literálokra igaz?
Figyelt kérdés
#literál #stringliterál
2017. júl. 29. 16:01
2/12 anonim válasza:
Semmilyen literálokra nem igaz.
3/12 anonim válasza:
A processzor nem tárol semmit, az utasításokat végez. Természetesen a literálok is, mint minden adat a memóriában tárolódik, a különbség, hogy ezeket gyakran 'read-only' szegmensekre helyezik, mivel az itt tárolt adatok nem fognak változni (természetesen itt read-only alatt nem tényleges ROM-ot kell érteni, csak olyan memóriaszegmenst, ahova nem változó adatot töltenek be). Szóval de, a string literálok a memóriában tárolódnak, ahogy minden literál.
4/12 A kérdező kommentje:
Ez olyan szempontból érdekes, hogy egy tanárom elmondása szerint a literálok nem const valami típusúak, hanem const nélküliek. De mégis úgy viselkednek, mint a const típusminősítővel ellátott változók? Vagy miben különböznek tőlük?
2017. júl. 30. 22:15
5/12 anonim válasza:
Const típusminősítővel ellátott változó nincs. Ami const, az konstans. Namost nem egészen értem a tanárod mégis mit akar mondani, de a literálok nagyonis konstansok, sőt, leginkább a static const adattagokhoz hasonlíthatóak. A program futásának elején betöltődnek a memóriába, és a program futása végén kerülnek felszabadításra.
6/12 A kérdező kommentje:
Akkor ezen állítás nem igaz?
A változókban el nem tárolt értékek nem minősülnek konstansnak, ha egyszerű típusokról van szó.
Például:
a return 0; utasításban a 0 literál valójában int típusú (nem pedig const int típusú)
a cout << "pi erteke: " << 3.14 << endl; utasításban a 3.14 literál double típusú
a cout << 5 / 2; utasításban az 5 / 2 művelet eredménye (2) int típusú
a cout << 5 / 2.0; utasításban az 5 / 2.0 művelet eredménye (2.5) double típusú
forrás: [link]
2017. júl. 31. 10:47
7/12 anonim válasza:
Nem egészen értem mire akar kilyukadni. A literál az literál. Máshogy tárolódik, máshogy kezelődik, mint gyakorlatilag bármi más. De a elgtöbb szempontból úgy viselkedik, mint egy static const adattag. Ennek a 'const, nem const' gondolatmenetnek szerintem nincs sok értelme. A literál rvalue, immutable. Mint a konstansok. Függvény paraméterként referencia szerint csak const reference-ként adható át. Mint. A. Konstansok. Szóval nem igazán értem, mire gondolt a tisztes szerző. Maradjunk annyiban, hogy a literál az literál, és pont.
8/12 A kérdező kommentje:
A lényeg az, hogy a literálokat és a const típusminősítővel ellátott "változókat" (konstansokat) egyenértékűnek tekinthetjük?
Egyébként a műveletek eredménye is literál? Pl. cout << 5 + 5 << endl;
2017. aug. 2. 15:56
9/12 anonim válasza:
Ha a kódban 5 + 5 szerepel, akkor azt a legtöbb fordító élből kioptimalizálja 10-re. Egyébiránt ugyanolyan lenne az eredmény, mint bármilyen művelet eredménye.
10/12 Hominida válasza:
A konstans nem típus, hanem valójában egy utasítás a compilernek arra, hogy a kódban levő ilyen nevű adatokat az itt megadottal helyettesítse. Beírhatnád az összes helyre magát az értéket, de önálló konstans definiálásával megteremted az egyszerű megváltoztathatóságát, ennyi az előnye.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!