C++03
Megjelenés
Főnév
C++03 (tsz. C++03s)
- (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 igazivector<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éstemplatekulcsszavakat 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::allocatorhaszná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 |