Я только заметил std::byte
в С ++ 17.
Я задаю этот вопрос, потому что я использую приведенный ниже код для отправки массива байтов в C ++ для воспроизведения звука.
C #:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C ++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(unsigned char* audioBytes)
С новым byte
введите в C ++ 17, похоже, я может быть быть в состоянии сделать это сейчас:
C #:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C ++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(byte[] audioBytes)
Я не уверен, будет ли это работать, потому что компилятор, который я использую, не поддерживает byte
в C ++ 17 пока нет.
Итак, это std::byte
в C ++ 17 эквивалентно byte
в C #? Есть ли причина не использовать std::byte
над unsigned char*
?
Как и типы символов (символ, символ без знака, знак с символом)
std::byte
может использоваться для доступа к необработанной памяти, занятой другими объектами.
Это говорит мне, что вы можете свободно заменить
unsigned char audioBytes[]
с
std::byte audioBytes[]
в заголовке функции, и все будет работать, при условии, что вы планируете обрабатывать байты как байты, а не числовые объекты.
std::byte
эквивалентно обоим unsigned char
а также char
в C ++ в том смысле, что это тип для представления 1 байта необработанной памяти.
Если вы использовали unsigned char*
в своем интерфейсе вы можете легко заменить его на std::byte
,
В вашем коде на C # это вообще не приведет к изменениям, на стороне C ++ это сделает вашу систему типов более строгой (что хорошо) из-за того, что вы не сможете обрабатывать свои std::byte
s как текстовые символы или как маленькие целые числа.
Конечно, это функция C ++ 17, которая может или не может должным образом поддерживаться вашим компилятором.