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

1 c++ casting saxparser

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

因为我正在使用MSXML2的SAXReader,所以我需要传递unsigned short *的某些方法。我需要传递的值是wchar_t,因此执行此强制转换安全吗?

Bat*_*eba 5

通常,强制转换是不安全的,因为严格的别名规则禁止它。

但是,你将摆脱它,如果wchar_t是一个typedefunsigned short。如果是,则可以在编译时static_assert根据的值使用

std::is_same<whar_t, unsigned short>::value
Run Code Online (Sandbox Code Playgroud)

还要注意,尽管这样的实现依赖于编译器没有正确地实现标准:形式上wchar_t与整数类型之一具有相同的大小,符号和对齐方式,但是是不同的类型。”因此,a typedef将不符合要求价值主张应该永远失败。

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