C++-ban hogyan kell érteni azt, hogy egy tömb elemszáma fordítási időben ismert kell, hogy legyen? Hiszen a felhasználótól is bekérhetjük a tömb méretét, és az csak futási időben lesz ismert.
Pontosan így.
A felhasználótól nem kérheted be futásidőben, mert fordításidőben kell ismertnek lennie.
De kell, nem értem mit nem lehet ezen érteni meg jönni mindenféle ostoba példákkal.
Ezt mondja a C++ szabvány és pont.
Azt, hogy ennél sok fordító bóvebbet megenged az egyéni szociális probléma.
A szabvány szerinti C++-ban (legelső szabvány, Ansi C++) nem megengedett. A legtöbb fordítón azért mégis működik.
Ha futásidőben akarsz létrehozni tömböt, arra a new, vagy a c-ből maradt malloc való, azzal tudsz tetszőleges méretűt foglalni.
A működik, és a szabad között van különbség :)
Szerintem keveritek a szezont a fazonnal.
Egy analóg kérdés: Az autóm forgalmijából az derül ki hogy 2 személyes. Mi van ha már ketten utazunk és egy stoppost is fel akarunk venni?
Válasz:
Ne vegyél fel stoppost, VAGY ha számítani kell több utasra másik autóval kell INDULNI.
AZAZ ha az array mérete ismeretlen fordítási időben arra ott a dinamikus helyfoglalás.
Persze az is lehetséges hogy fordításkor csinálsz egy olyan nagy tömböt hogy az összes adat beleférjen.
Tehát akkor ez nem szabványos:
int n;
cin >> n;
int tomb[n];
Egy régi C++ tanáromat is megkérdeztem, állítása szerint ez sem szabványos:
int n;
cin >> n;
int* tomb_2;
tomb_2 = new int[n];
Tehát akkor C++-ban nincs olyan egyszerű tömb, ami szabványos is, és nem baj, ha futási időben derül ki az elemszáma?
És miért van az, hogy pl. az eltén nem szabványos kód szerepel a tananyagban? (Lásd 11. oldalon itt:
[link] )
A második szabványos.
Attól, hogy nem szabványos még lehet használni.
A korábbi C++ szabvány szerint a tömbök a fordítás során jönnek létre, a méretet definiáló konstans kifejezések felhasználásával. A C++11 szabvány (Visual C++ 2012) a változó méretű tömbök (variable-length array) bevezetésével bővíti a tömbök használatának lehetőségeit. A futásidőben létrejövő változó hosszúságú tömb csak automatikus élettartamú, lokális változó lehet, és a definíciója nem tartalmazhat kezdőértéket. Mivel az ilyen tömbök csak függvényben használhatók, elképzelhető, hogy a tömbök mérete mind
[link] híváskor más és más - innen az elnevezés.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!