首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串流

C++字符串流
EN

Stack Overflow用户
提问于 2013-01-18 02:19:25
回答 3查看 1.4K关注 0票数 2

当你这样做的时候,stringstream是如何工作的:

代码语言:javascript
复制
stringstream ss;
ss << "123" << "abc";

它是创建一个一次性的"123abc“字符串,还是对字符串流连续执行这两个操作?

我想要复制该功能,但我做的任何重载似乎都不能像上面的代码那样使用两个参数...

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 02:21:46

这相当于对<<操作符进行两次单独的函数调用:

代码语言:javascript
复制
(ss.operator<<("123")).operator<<("abc")

所以,是的,它“连续”地执行这两个操作。

票数 12
EN

Stack Overflow用户

发布于 2013-01-18 02:30:37

实际上它等同于:

代码语言:javascript
复制
std::operator<<(std::operator<<(ss, "123"), "abc");

请注意,没有成员函数,它以const char*为参数。它是一个非成员函数,ss作为第一个参数传递给它,const char*作为第二个参数传递。该函数返回std::ostream&,然后再次传递给它。更像是这样:

代码语言:javascript
复制
print( print (ss, "123"), "abc"); //just for clarity

这意味着有两个函数调用。用std::operator<<替换print。现在一切都清楚了。

希望这能有所帮助。

另一个答案是这样的:

代码语言:javascript
复制
(ss.operator<<("123")).operator<<("abc") //copied from other answer (wrong)

是错误的!它是错误的,因为它假设以const char*为参数的operator<<是一个成员函数,而这不是真的!

票数 5
EN

Stack Overflow用户

发布于 2013-01-18 02:26:27

std::stringstream::operator<<(const char*)返回一个std::stringstream&

这项技术可以让你“链接”它。

这并不完全正确--但对于您的目的来说,它相当于事实。

一个更准确的说法是std::stringstream& operator<<(std::stringstream&, const char*)可以链接。

更准确的说法是ostream& operator<<(ostream&, const char*)存在,并且std::stringstream是一个ostream,那么<<上的重载解析就会调用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14385552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档