执行此操作时 stringstream 如何工作:
stringstream ss;
ss << "123" << "abc";
它是创建一个一次性的“123abc”字符串还是对字符串流连续执行这两个操作?
我想复制该功能,但没有重载我似乎使用两个参数,如上面的代码......
执行此操作时 stringstream 如何工作:
stringstream ss;
ss << "123" << "abc";
它是创建一个一次性的“123abc”字符串还是对字符串流连续执行这两个操作?
我想复制该功能,但没有重载我似乎使用两个参数,如上面的代码......
这相当于对 << 运算符进行两个单独的函数调用:
(ss.operator<<("123")).operator<<("abc")
所以是的,它“连续”执行这两项操作。
实际上它等价于:
std::operator<<(std::operator<<(ss, "123"), "abc");
请注意,没有作为参数的成员函数const char*
。它是一个非成员函数,并ss
作为第一个参数传递给它,并const char*
作为第二个参数传递。函数返回std::ostream&
,然后再次传递给它。它更像是这样的:
print( print (ss, "123"), "abc"); //just for clarity
这意味着有两个函数调用。替换print
为std::operator<<
。现在一切都会清楚了。
希望有帮助。
另一个答案是这样说的:
(ss.operator<<("123")).operator<<("abc") //copied from other answer (wrong)
是错的!operator<<
这是错误的,因为它假定const char*
作为参数的参数是一个不正确的成员函数!
std::stringstream::operator<<(const char*)
返回一个std::stringstream&
。
这种技术可以让你“链接”它。
这并不完全正确——但对于您的目的而言,它几乎等同于事实。
一个稍微更准确的说法是std::stringstream& operator<<(std::stringstream&, const char*)
可以链接。
一个更准确的陈述是ostream& operator<<(ostream&, const char*)
存在,并且std::stringstream
是一个ostream
,然后重载决议<<
调用它。