C++03
| Версії мови програмування C++ |
|---|
C++03 — редакція стандарту мови програмування C++, формально опублікована як ISO/IEC 14882:2003. Стандарт був затверджений у 2003 році спільно Міжнародною організацією зі стандартизації (ISO) та Міжнародною електротехнічною комісією (IEC).
C++03 замінив попередній стандарт C++98 і пізніше був замінений стандартом C++11.
Історія та призначення
Основною метою стандарту C++03 було усунення помилок, неточностей і неоднозначностей, виявлених у стандарті C++98. На відміну від наступних версій, C++03 майже не впроваджував нових мовних можливостей і розглядається переважно як реліз виправлення дефектів, спрямований на підвищення узгодженості та портативності реалізацій компіляторів і стандартної бібліотеки.[1]
Зміни порівняно з C++98
Виправлення дефектів
У стандарті C++03 було враховано значну кількість накопичених звітів про дефекти:
Ці уточнення конкретизували семантику мови та вимоги до стандартної бібліотеки, істотно зменшуючи розбіжності між реалізаціями різних компіляторів.
Ініціалізація значеннями
Єдиною новою мовною можливістю, формально доданою у C++03, стала ініціалізація значеннями (англ. value initialization). Вона визначила чітку та передбачувану поведінку ініціалізації обʼєктів нульовими або типовими значеннями й усунула низку раніше неоднозначних випадків.[4]
Безперервне зберігання std::vector
Одним із найбільш відомих рішень стандарту C++03 стало врегулювання звіту про дефект бібліотеки № 69 (LWG 69), який стосувався контейнера std::vector.
Передумови
У стандарті C++98 не існувало формальної вимоги щодо безперервного розміщення елементів контейнера std::vector у памʼяті. Хоча більшість реалізацій фактично використовували суцільний блок памʼяті, стандарт прямо цього не гарантував.
Зміни в C++03
C++03 закріпив вимогу, що елементи std::vector повинні зберігатися безперервно в памʼяті. Це стандартизувало поширене припущення серед програмістів і дозволило безпечно використовувати std::vector у сценаріях, що залежать від масивоподібного компонування памʼяті.[5]
Значення
Хоча C++03 не запровадив масштабних нових механізмів, він відіграв ключову роль у стабілізації мови C++. Стандарт підвищив передбачуваність поведінки програм, покращив сумісність між реалізаціями та створив надійну основу для подальших суттєвих змін, реалізованих у C++11.
Код, написаний відповідно до вимог C++03, і надалі використовується у системному програмуванні та в проєктах з підвищеними вимогами до стабільності й портативності.
Примітки
- ↑ Bjarne Stroustrup. Bjarne Stroustrup's FAQ — What is the difference between C++98 and C++03?. stroustrup.com. Архів оригіналу за 6 лютого 2016. Процитовано 22 квітня 2026.
- ↑ C++ Standard Core Language Issue Index by Status (TC1). WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.
- ↑ C++ Standard Library Issues List: TC1 (125 issues). WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.
- ↑ Value initialization. cppreference.com. Процитовано 22 квітня 2026.
- ↑ Library Defect Report 69 — Must elements of a vector be contiguous?. WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.