C++03

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 було враховано значну кількість накопичених звітів про дефекти:

  • 92 звіти щодо основної мови;[2]
  • 125 звітів щодо стандартної бібліотеки.[3]

Ці уточнення конкретизували семантику мови та вимоги до стандартної бібліотеки, істотно зменшуючи розбіжності між реалізаціями різних компіляторів.

Ініціалізація значеннями

Єдиною новою мовною можливістю, формально доданою у 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, і надалі використовується у системному програмуванні та в проєктах з підвищеними вимогами до стабільності й портативності.

Примітки

  1. Bjarne Stroustrup. Bjarne Stroustrup's FAQ — What is the difference between C++98 and C++03?. stroustrup.com. Архів оригіналу за 6 лютого 2016. Процитовано 22 квітня 2026.
  2. C++ Standard Core Language Issue Index by Status (TC1). WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.
  3. C++ Standard Library Issues List: TC1 (125 issues). WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.
  4. Value initialization. cppreference.com. Процитовано 22 квітня 2026.
  5. Library Defect Report 69 — Must elements of a vector be contiguous?. WG21 (ISO C++ Committee). Процитовано 22 квітня 2026.