Com*_* 10 14 c++ stl ostringstream
几天前我遇到了一个微妙的错误,代码看起来像这样:
ostringstream ss;
int anInt( 7 );
ss << anInt << "HABITS";
ss << ends;
string theWholeLot = ss.str();
Run Code Online (Sandbox Code Playgroud)
的问题是,ends
被粘一个"\ 0"到ostringstream
这样theWholeLot
本来的样子"7HABITS\0"
(即,在端部的空)
现在这没有出现,因为theWholeLot
当时被用来使用该const char *
部分.string::c_str()
这意味着null被掩盖,因为它变成了一个分隔符.但是,当这改变为使用整个字符串时,null突然意味着某些东西和比较,例如:
if ( theWholeLot == "7HABITS" )
Run Code Online (Sandbox Code Playgroud)
会失败的.这让我想到了:据推测,原因ends
是回归到ostrstream
流通常没有以null结束的时候,并且必须如此str()
(然后抛弃而不是string
a char *
)才能正常工作.
但是,既然不可能char *
从a中删除ostringstream
,使用ends
不仅是多余的,而是潜在的危险,我正在考虑从客户代码中删除它们.
任何人都可以看到ends
在一个std::string
唯一的环境中使用的明显理由吗?
你基本上回答了你自己的问题是需要的细节.当然,我想不出任何理由使用std::ends
的时候std::string
,并std::stringstream
处理所有的为您服务.
因此,要明确回答您的问题,不,没有理由std::ends
在std::string
唯一的环境中使用.