C++ 将wchar\u t转换为wstring

C++ 将wchar\u t转换为wstring,c++,C++,我总是用std::wstring x(y) 但它不适用于此代码: wchar\u t f=ctoupper(*cp); std::wstring cc(f); cp是一个wchar\u t* std::wstring cc(f)行中出现错误: E0289 no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=wchar_t, _Tr

我总是用
std::wstring x(y)

但它不适用于此代码:

wchar\u t f=ctoupper(*cp);
std::wstring cc(f);
cp
是一个
wchar\u t*

std::wstring cc(f)
行中出现错误:

E0289   no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t>]" matches the argument list  
E0289构造函数“std::basic_string::basic_string[with _Elem=wchar_t,_Traits=std::char_Traits,_Alloc=std::allocator]”的实例与参数列表不匹配
有什么问题吗?

对于单个
wchar\t
值,没有构造函数。您可以通过以下方式实现您的意图:

    std::wstring cc(1,f);   
您还可以直接从c型空终止的
wchar\t
数组中构造
wstring

    std::wstring cc(1,f);   // wstring made with a wchar_t f repeated 1 time
    std::wstring cg(cp);    // wstring made with a wchart_t null terminated array
    std::wcout<<cc<<std::endl<<cg<<std::endl; 
()


或者,您可能更喜欢
toupper(x,std::locale())
来考虑当前区域设置中非ascii字符的转换规则。

谢谢,您知道如何将wstring转换为大写吗?--请将问题集中在一个主题上。要求澄清是可以的,但不要在现有问题的基础上提出独立问题。@Frank我用更多解释编辑了我的答案谢谢你Christophe会帮上大忙的!:)你知道你只是得到了第一个字符,而不是整个字符串吗?
basic_string
(string和
wstring
下面的模板)由于其大量的成员函数而令人讨厌。尽管如此,还是值得一看,以获得一个概述。例如,查看
cppreference.com
    for (auto&x:cg) x=towupper(x);