gpt4 book ai didi

c++ - 允许将 "const char*"分配给 std::string,但分配给 std::wstring 不会编译。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:23 27 4
gpt4 key购买 nike

我假设 std::wstring 和 std::string 都提供或多或少相同的接口(interface)。

所以我尝试为我们的应用程序启用 unicode 功能

# ifdef APP_USE_UNICODE
typedef std::wstring AppStringType;
# else
typedef std::string AppStringType;
# endif

但是,当使用 -DAPP_USE_UNICODE 时,这会给我带来很多编译错误。

事实证明,当将 const char[] 分配给 std::wstring 时,编译器会阻塞。

编辑:通过删除文字“hello”的使用改进了示例。

#include <string>

void myfunc(const char h[]) {
string s = h; // compiles OK
wstring w = h; // compile Error
}

为什么会产生如此大的影响?

允许将 const char* 分配给 std::string,但分配给 std::wstring 会导致编译错误。

难道 std::wstring 不应该提供与 std::string 相同的接口(interface)吗?至少对于赋值这样的基本操作?

(环境:Ubuntu Karmic 32 位上的 gcc-4.4.1)

最佳答案

你应该这样做:

#include <string>

int main() {
const wchar_t h[] = L"hello";
std::wstring w = h;
return 0;
}

std::stringstd::basic_string<char> 的类型定义, 而 std::wstringstd::basic_string<wchar_t> 的类型定义.因此,wstring 的“等效”C 字符串是 wchar_t 的数组

字符串文字前面的'L'表示您使用的是宽字符字符串常量。

关于c++ - 允许将 "const char*"分配给 std::string,但分配给 std::wstring 不会编译。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com