C++ 17 中的 std::byte 是否等同于 C# 中的字节?

Is std::byte in C++ 17 equivalent to byte in C#?

我刚刚注意到 C++ 17 中的 std::byte

我问这个问题是因为我使用下面的代码将字节数组发送到 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)

使用 C++ 17 中的新 byte 类型,看起来我 可能 现在可以做到这一点:

C#:

[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);

C++:

#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(byte[] audioBytes)

我不确定这是否有效,因为我使用的编译器尚不支持 C++ 17 中的 byte

那么,C++ 17 中的 std::byte 是否等同于 C# 中的 byte?有没有理由不使用 std::byte 而不是 unsigned char*

According to C++ reference,

Like the character types (char, unsigned char, signed char) std::byte can be used to access raw memory occupied by other objects.

这告诉我你可以自由更换

unsigned char audioBytes[]

std::byte audioBytes[]

在函数头中,如果您打算将字节视为字节而不是数字对象,一切都会正常进行。

std::byte 在某种意义上等同于 C++ 中的 unsigned charchar,它是一种表示 1 个字节原始内存的类型。

如果您在界面中使用了 unsigned char*,您可以轻松地将其替换为 std::byte

在你的 C# 代码中,这将导致根本没有任何变化,在 C++ 方面,这将使你的类型系统更加严格(这是一件好事),因为你将无法处理你的std::bytes 作为文本字符或小整数。

当然,这是 C++17 的特性,您的编译器可能不支持它。