std::byte
在 C++17 中定义为:
enum class byte : unsigned char {};
我目前坚持使用 C++14,我想知道如果我在 C++14 中添加相同的定义(在某些非 std 命名空间中,以及运算符重载等),这个新类型会得到与
unsigned char
相同的别名“自由通行”还是我因违反严格的别名规则而将自己设置为未定义的行为?
它似乎有效,但我想知道我是否应该选择
using byte = unsigned char;
,这可悲地导致其他并发症(例如,我无法区分字节和uint8_t
)。
不,这是不可能的。别名异常仅特定于
char
、unsigned char
和 std::byte
。您无法用标准 C++ 编写类型来获得它们的“超能力”。
可能有特定于编译器的属性可以给出用
声明的类型enum class byte : unsigned char {};
等效的别名异常,尽管别名也不是唯一的异常行为。从技术上讲,
std::byte
和unsigned char
也是核心语言中的特定例外,能够为其他对象提供存储。其他类型无法做到这一点。然而,在通常的 C++ 实现中,这部分在实践中可能并不那么相关。