不同的字符串类型之间不可直接转换
12.12 ID_charWCharCast
char* 和 wchar_t* 直接转换并不进行字符集转换,属于语言运用错误,char*、wchar_t*、char16_t* 以及 char32_t* 之间均不可直接转换。
本规则是 ID_castNoInheritance 的特化。
示例:
wchar_t* to_unicode(char* str) {
return (wchar_t*)str; // Remarkably brave, but totally wrong
}
示例代码显然是错误的,应改用 iconv、MultiByteToWideChar 等字符集编码转换函数。
由于 unsigned char* 一般针对二进制数据,unsigned char* 与其他字符串类型之间的转换可不受本规则约束,但 char* 不应作为二进制数据的类型,参见 ID_plainBinaryChar。