A c/c++ const változók fordításkor konstansként kerülnek a kódba, vagy futáskor értékelődnek ki?
Tehát mondjuk van egy ilyen kódrészlet:
int fg() {
const int i = 10;
return i+1;
}
Itt az "i+1" kifejezés futáskor értékelődik ki, vagy a fordító már eleve a 11 literált fordítja a kódba?
Köszönöm!
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
"An integral constant-expression can involve only literals of arithmetic types (2.13, 3.9.1), enumerators, non-volatile
const variables"
nekem ebből az jön le, hogy az const+literál lehet literál (nagy valószínűséggel az is lesz), de nincs megszabva
de még valaki javítson ki, biztos van konkrét válasz is
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Amennyire rémlik egy fordítási idejű konstans nem kap saját tárterületet, csak ha elkéri valaki a címét. Tehát az i használata megfelel annak, mintha a 10 literált írnád be oda, és 10 + 1 meg szabvány szerint fordul 11-re. Azt meg hogy a szabvány pontosan mit mond, derítsd ki valamelyik ingyenes draftból.
Másik eset ha a const változó nem fordítási idejű, tehát pl
void f(int a)
{
const int orig(a);
}
Értem, tehát akkor a fenti egyszerű esetben nem foglalódik hely az i-nek, és a kifejezést is a fordító értékeli ki.
Köszönöm! :)
További kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!