如何添加到wstring?

cod*_*rog 9 c++ visual-c++

这适用于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型stringwstring(使用charwchar_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)完全不同的类型,所以你不能将两者结合起来.


Edw*_*nge 7

你可以使用前缀"hai!"来使用宽字符文字而不是字符字符文字.与L.