Короткий ответ - да, это может повлиять.
char и unsigned char являются конвертируемыми типами (3.9.1 в C ++ Standard 0x n2800), поэтому вы можете назначать один другому. Тебе вообще не нужен актерский состав.
[3.9.1] ... Символ, подписанный символ и неподписанный
символ занимает одинаковое количество памяти
и имеют одинаковое выравнивание
требования; то есть у них есть
то же представление объекта .
[4.7] ...
2 Если тип назначения
без знака, полученное значение
наименьшее целое число без знака соответствует
целое число источника (по модулю 2n, где n
это количество битов, используемых для
представляют тип без знака).
[Примечание:
В дополнительном представлении двух
это преобразование является концептуальным и
нет изменений в битовой комбинации
(если нет усечения). —Конечная записка
]
3 Если тип назначения подписан,
значение не изменяется , если оно может быть
представлены в типе назначения
(и ширина битового поля); в противном случае
значение определяется реализацией.
Таким образом, даже в худшем случае вы получите наилучшее (менее определяемое реализацией) преобразование. В любом случае, в большинстве реализаций это ничего не изменит в битовой структуре, и вы даже не будете иметь преобразование, если посмотрите на сгенерированный ассемблер.
template<class ITER_T>
char *copy_binary( unsigned char length, const ITER_T& begin)
{
char* stg = alloc_storage(length);
std::copy(begin, begin + length, stg);
return stg;
}
Использование reinterpret_cast зависит от компилятора:
[5.2.10.3] Отображение, выполненное
reinterpret_cast is
от реализации . [ Обратите внимание
может или не может производить
представление отличается от
первоначальная стоимость —Конечная записка]
Примечание: Этот - интересный связанный пост.