首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

允许为std :: string分配"const char*",但是不能编译分配给std :: wstring.为什么?

在这个问题中,您提到了尝试将 "const char" 分配给 std::wstring 时出现编译错误。这是因为 std::wstring 是一个宽字符字符串,而 "const char" 是一个窄字符字符串。宽字符和窄字符在内存中的表示方式不同,因此不能直接将它们互相赋值。

要将 "const char*" 转换为 std::wstring,您可以使用以下代码:

代码语言:c++
复制
std::string str = "const char*";
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wstr = converter.from_bytes(str);

这里使用了 C++11 中的 std::wstring_convert 和 std::codecvt_utf8 类,将窄字符字符串转换为宽字符字符串。

在 C++17 中,您可以使用更简单的方法:

代码语言:c++
复制
std::string str = "const char*";
std::wstring wstr = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(str);

总之,std::wstring 不能直接分配 "const char*",因为它们是不同类型的字符串,需要进行转换才能实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++11 Unicode支持

在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t的宽度由编译器实现,因此不同的编译器有着不同的实现方式,GNU C++规定wchar_t为32位,Visual C++规定为16位。由于wchar_t宽度没有一个统规定,导致使用wchar_t的代码在不同平台间移植时,可能出现问题。这一状况在C++11中得到了一定的改善,从此Unicode字符的存储有了统一类型: (1)char16_t:用于存储UTF-16编码的Unicode字符。 (2)char32_t:用于存储UTF-32编码的Unicode字符。 至于UTF-8编码的Unicode数据,C++11还是使用了8bits宽度的char类型数组来表示,而char16_t和char32_t的宽度由其名称可以看出,char16_t为16bits,char32_t为32bits。

03
领券