gpt4 book ai didi

c++ - wstring 数据到 const uint32_t*

转载 作者:行者123 更新时间:2023-12-03 10:05:51 27 4
gpt4 key购买 nike

我有一个类型为 std::wstring 的对象以及一个需要 const uint32_t* 的库函数作为论据。我的代码在 sizeof(wchar_t) == 4 的平台上运行.库中没有 API (harfbuzz) 需要 const wchar_t* ,所以我必须转换我的 std::wstring .我知道reinterpret_cast不安全(它违反了严格的别名规则),但我不想创建 std::vector<uint32_t> ,调整大小和 memcpy我的整个字符串。我 100% 确定编译器不会优化它。而且似乎std::bit_cast也帮不了我,它只能转换一个 wchar_tuint32_t .
我只看到一种解决方案:使用 reinterpret_cast .字符串不会更改,我的代码中也不会在库中更改,因此我认为在这种情况下违反严格的别名规则不是问题。
还有其他选择吗?当代码中的数据类型与某些 C 库( int32_t*uint32_t*char16_t*unsigned short* 等)中的输入类型不匹配时,您会怎么做?

最佳答案

如果您需要严格遵守标准,唯一的选择是从 c_str() 进行内存复制。在 std::wstringuint32_t大批。你可以大喊@#!严格的别名规则,如果它能让你平静一点......
如果您只是使用现实世界编译器的现实世界程序员,那么他们中的大多数(不是全部)都知道严格别名规则有时可能有点过于严格,并提供(作为文档扩展)一个选项来发布它。我的建议是在执行滥用转换(C 样式转换或 reinterpret_cast)的编译单元上使用该选项,但要使该编译单元尽可能小,以仍然允许优化编译器在所有其他编译中采用严格别名单位。

关于c++ - wstring 数据到 const uint32_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66227261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com