为什么我不能在return语句中使用"<<"运算符?

mch*_*hen 4 c++ return operators stringstream

例如:

std::stringstream formatMemUsage(...) {
    std::stringstream ss ...
    ...
    return ss << "MB";   // Error here
}
Run Code Online (Sandbox Code Playgroud)

导致错误no suitable user-defined conversion from "std::basic_ostream<char, std::char_traits<char>>" to "std::stringstream" exists.

可以将return语句分成2个语句ss << "MB"; return ss;,错误消失了 - 为什么?

(使用MSVC++ 2010)

Yuu*_*shi 8

因为您要返回最后一个评估语句.考虑一下这实际上是做什么的:

return ss << "MB";
Run Code Online (Sandbox Code Playgroud)

相当于:

return operator<<(ss, "MB");
Run Code Online (Sandbox Code Playgroud)

operator<<在这种情况下,返回类型是,如您所见,std::ostream&- 不是std::stringstream您想要的.

  • 即使匹配的类型,流也不可复制.返回类型是`std :: ostream&`. (2认同)