Ugrás a tartalomhoz

C++03

A Wikiszótárból, a nyitott szótárból


Főnév

C++03 (tsz. C++03s)

  1. (informatika) A C++03 a C++ programozási nyelv 2003-as szabványosítása (ISO/IEC 14882:2003), amely a C++98 szabvány hivatalos “bugfix” változata. Nincsenek benne nagy nyelvi újítások, viszont fontos pontossági, konzisztencia- és implementációs problémákat javít ki a C++98-hoz képest.



🔹 Kontextus: C++03 célja

  • Nem új nyelvi funkciók bevezetése, hanem a C++98 szabvány formalizálása és pontosítása
  • Elsősorban a Standard Template Library (STL) viselkedésének és követelményeinek konkretizálása
  • Javítások a fordítók viselkedésével kapcsolatban (ill-formed kód, template-ek, típusok)



🔹 Legfontosabb módosítások a C++98-hoz képest

1. std::vector<bool> specifikációs pontosítás

  • A vector<bool> különleges specializáció volt C++98-ban, amely nem egy igazi vector<T>, hanem bitfield-alapú megoldás.
  • C++03 pontosítja ennek működését, különösen az iterator viselkedést.
std::vector<bool> flags = {true, false};
auto val = flags[0]; // proxy objektum, nem bool!

2. Template definíciók és fordítási idő

  • C++03 tisztázza, hogy a template-eket fordítási időben csak akkor kell teljesen feldolgozni, ha valóban instanciálják őket.
  • Ez csökkenti a szükségtelen fordítási hibákat.



3. typename és template kulcsszavak tisztázása

  • Megerősítette, hogy mikor kell használni a typename és template kulcsszavakat a függő neveknél (dependent names).
  • Pl.:
template<typename T>
void f() {
    typename T::value_type x;   // kötelező a `typename`
}

4. std::allocator és az STL konténerek

  • A memóriakezelésért felelős std::allocator használatát és elvárásait pontosították.
  • Ez fontos volt, mert a std::vector, std::list, stb. implementációja gyakran nem volt egységes a különböző fordítókban.



5. Copy constructor és assignment operator elérhetősége

  • Tisztázta az automatikusan generált másoló konstruktor és értékadó operátor viselkedését.
struct A {
    A(const A&) = default;   // C++03 előtt ez nem volt explicit elérhető
};

6. Standard header fájlok pontosítása

  • Mely könyvtárfájlok tartalmazzák a különböző típusokat és függvényeket (<cmath>, <cstdlib>, stb.)



🔹 Mit NEM tudott C++03?

C++03 még nem tartalmazza a modern C++ nyelvi eszközeit:

Funkció Először elérhető
auto, decltype C++11
nullptr C++11
range-based for C++11
Lambdák C++11
constexpr C++11
Move-szemantika (std::move) C++11
static_assert C++11
std::unique_ptr, shared_ptr C++11

C++03 még klasszikus C++-t jelent – fejlett, de nem modern. Tipikusan raw pointerekkel, manuális memóriakezeléssel, és sablonokkal való korlátozottabb programozással járt.



🔹 Mikor használjuk?

  • Manapság szinte soha nem ajánlott C++03-at használni, kivéve:
    • Legacy kód karbantartása esetén
    • Beágyazott rendszerek esetén, ha csak régi fordító áll rendelkezésre
    • Tanulmányi célokra: klasszikus C++ tanulása



🔹 Összefoglalás

Szempont Leírás
Szabvány neve ISO/IEC 14882:2003
Fő cél C++98 specifikációjának pontosítása
Új nyelvi funkciók Nincs (csak hibajavítások és tisztázások)
STL fejlesztés Pontosabb elvárások, iterator viselkedés
Mai jelentősége Elsősorban történelmi és kompatibilitási