Кроме того, вы можете избежать reinterpret_cast
и любых опасений по поводу псевдонимов, если используете *1003* конструктор диапазона (номер 6) :
std::string msg(buffer, buffer + length);
Теперь инициализация зависит исключительно от преобразования unsigned char
(потому что давайте посмотрим правде в глаза, это то, что, вероятно, uint8_t
) в char
. Результат преобразования определяется реализацией, но это не должно удивлять.
В качестве еще одного отступления следует также учитывать, является ли std::string
правильной абстракцией здесь. Вы намерены рассматривать буфер как строковый тип? Для последовательности необработанных байтов, без какого-либо строкового багажа, возможно, с std::vector<std::uint8_t>
или std::vector<std::byte>
может быть проще работать.