使用一些模板化方法理解reinterpret_cast错误

问题描述 投票:0回答:1

我正在尝试使用一些 C++ ARM 编译器编译以下代码。

void pairs_converter(const mem_t& mem, uint16_t* data) {/* some stuff */}

template <typename StringT>
inline 
void to_string(const mem_t& mem, StringT& s)
{
    s.resize(24);
    pairs_converter(mem, reinterpret_cast<uint16_t*>(&s[0]));
}

我收到以下错误代码:

error: cast from '__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type*' {aka 'char*'} to 'uint16_t*' {aka 'short unsigned int*'} increases required alignment of target type [-Werror=cast-align]
         pairs_converter(mem, reinterpret_cast<uint16_t*>(&s[0]));

根据我的理解,它看起来像是一些单词和八位字节之间的对齐问题,但我对 C++ 的掌握不够流畅,无法理解如何解决这个编译器错误。

我将不胜感激有关此 C++ 错误的一些更详细的解释!

c++ compiler-errors memory-alignment reinterpret-cast
1个回答
0
投票

我的一般建议是不要使用reinterpret_cast,除非你确切地知道自己在做什么。如果你真的需要它,你应该在文档中真正熟悉它。

© www.soinside.com 2019 - 2024. All rights reserved.