这适用于std :: string
std::string class::something(char* input) {
std::string s(input);
s = "hai! " + s;
return s;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我用wstring尝试相同的东西就会失败
std::wstring class::something(wchar_t* input) {
std::wstring s(input);
s = "hai! " + s;
return s;
}
Run Code Online (Sandbox Code Playgroud)
我如何用std :: wstring做同样的事情?
Ada*_*erg 15
这里的问题是类型.wstring不是字符串,但引用的字符串常量与它相关(通常是a const char*),所以
s = "hai! " + s;
Run Code Online (Sandbox Code Playgroud)
实际上是一个问题.
值"hai! "是类型const char*,而不是类型const wchar_t*.既然const char*是基本型,它是寻找一个全球性的operator+经营const char*和wstring,它不存在.它会发现一个用于const wchar_t*和wstring,因为std::basic_string<T>,对于模板underyling型string和wstring(使用char并wchar_t作为类型参数,分别)也为创建模板方法operator+ (const T*& s1, const basic_string<T> s2),这样除了可以工作.
因此,你需要将"hai!"作为一个wstring:
std::wstring class::something(wchar_t* input){
std::wstring s(input);
s = L"hai! " + s;
return s;
}
Run Code Online (Sandbox Code Playgroud)
L在Visual C++中,字符串常量上的前缀将其定义为"long",因此定义为wstring.wstring 实际上basic_string<wchar_t>,这是因为C++模板的行为,与basic_string<char>(a std::string)完全不同的类型,所以你不能将两者结合起来.
| 归档时间: |
|
| 查看次数: |
20831 次 |
| 最近记录: |