c++ - 使用 char16_t 类型作为 char[] 的数组,并通过 reinterpret_cast<> 重新转换它。我的代码是否有未定义的行为?

标签 c++

我想检查 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/

相关文章:

c++ - 头文件中类型名称的显式限定

c++ - 在C++中使用括号和方括号创建动态数组之间的区别

c++ - 当父类共享指针为返回类型时返回新的基类

c++ - 下面的过程在C++中可以循环多少次?

c++ - Boost 错误 'assignment of read-only location' 和 'no matching function for call'(新安装)

c++ - 头文件中的类声明和定义是否会在每个包含文件中进行编译?

c++ - 尝试在 cpp 模块中使用汇编代码时出现链接器错误

c++ - 在 C++ 应用程序中链接到 C 库

c# - 收集系统和环境信息

c++ - 数组中的简单代码错误