C++:从 wchar_t* 转换为 unsigned short* 是否安全?

C++: Is it safe to cast from wchar_t* to unsigned short*?

C++:从 wchar_t* 转换为 unsigned short* 是否安全?

因为我使用的是MSXML2的SAXReader,所以我需要传递unsigned short*它的一些方法。我需要传递的值是 wchar_t,所以做这个转换是安全的吗?

一般来说,转换是不安全的,因为严格的别名规则禁止它。

但如果 wchar_tunsigned shorttypedef,你就可以逃脱惩罚。如果是,您可以在编译时根据

的值使用 static_assert 强制执行此操作
std::is_same<whar_t, unsigned short>::value

请进一步注意,尽管这样的实现依赖于您的编译器未正确实现标准:形式上 wchar_t 具有与其中一种整数类型相同的大小、符号和对齐方式,但它是一种不同的类型。”因此 typedef 不符合要求,值断言应该总是失败。

参考:http://en.cppreference.com/w/cpp/language/types