我想检查 char16_t
的对象内存表示输入 char[]
的数组并通过 reinterpret_cast<>
重新转换它.我的代码是否有未定义的行为?
我的转换代码如下:
char16_t code;
..... // some operating ensure the variable 'code' keep a value
for (auto rbegin = reinterpret_cast<char*>(&code + 1), rend = reinterpret_cast<char*>(&code); rbegin != rend;)
fout.put(*(--rbegin));
我的主要问题是 reintepret_cast<char*>(&code +1)
是错的?同时,我可以这样做吗?
最佳答案
code
不是 char16_t
的数组s(虽然它可以被认为是 1 个元素的数组)。所以取消引用 &code + 1
当您越界访问时,将导致未定义的行为。
您可以安全地执行以下操作:
rbegin = reinterpret_cast<char*>(&code) + 1
自 reinterpret_cast<char*>(&code)
将导致指向 char
的指针,加 1 表示您仍在允许访问的内存限制内。 (我在这里假设 char16_t
有两个字节)。
关于c++ - 使用 char16_t 类型作为 char[] 的数组,并通过 reinterpret_cast<> 重新转换它。我的代码是否有未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54247860/