尽管我评论说调查代码比人们猜测发生的事情要容易,但这是我对可能实现的猜测,因为您想知道它是如何完成的——这几乎可以出现在代码中的任何地方,只要它可以可以看到它被调用的位置,因为它没有修改任何标准库类:
std::wstring& operator<<=(std::wstring& out, const std::string& in) {
out += std::wstring(in.begin(), in.end());
return out;
}
我的猜测是,当 astring
被传递给 awstring
时,操作员正在执行某种“扩展”(从char
to的穷人转换wchar
,不考虑编码)。
为什么你想要这个而不是使用直接分配?好吧,除了ws = unique_dirs[i];
编译错误之外,它还可以为您提供一种连接字符串的方法:
std::string hello("hello ");
std::string goodbye("goodbye");
std::wstring ws;
ws <<= hello;
ws <<= goodbye;
// ws now is L"hello goodbye"
顺便说一句,上面没有修改标准库——它没有扩展std::basic_string
类,它只是提供一个将两个类作为参数的运算符。所以我不确定它在使用方面是如何归于“合法性”的。然而,这是相当可怕的,它的使用在道德上是应受谴责的。