В C++ используются широкие и узкие символьные типы данных, потому что возникает необходимость работы с символами, которые не закреплены в таблице ASCII. 1
Узкий символьный тип (char) хранит номер символа из этой таблицы и, как правило, занимает 1 байт. 15 Такой тип может принимать 256 значений. 4
Широкий символьный тип (wchar_t) предназначен для символов, для кодировки которых недостаточно 1 байта. 5 Он занимает 2 или 4 байта в зависимости от используемого компилятора и может принимать гораздо большие значения — до 65 536. 4 Такой тип используется, например, для хранения символов национальных алфавитов, таких как китайские или японские буквы. 2
Таким образом, узкий тип подходит для работы с символами, которые можно разместить в 1 байте, а широкий — для символов, требующих большего количества памяти.