Тип данных char в C++ может занимать разное количество байт на разных платформах из-за того, что разработчики компиляторов выбирают предельные размеры для типов самостоятельно, исходя из аппаратных возможностей компьютера. 1
Стандарт языка устанавливает лишь минимальные значения, которые должны быть. 1 Для типа char он определяет, что он должен занимать 1 байт (8 бит). 1 Однако производители компиляторов могут выбирать любую кодировку, но обычно это ASCII. 1
Кроме того, существуют системы, где количество бит в байте больше 8, то есть один байт может состоять из 8, 16, 32 или 64 бит. 3
Таким образом, даже в рамках одной платформы разные компиляторы могут по-разному подходить к размерам некоторых типов данных. 1