这些天有什么用于'目的'?

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()(然后抛弃而不是stringa char *)才能正常工作.

但是,既然不可能char *从a中删除ostringstream,使用ends不仅是多余的,而是潜在的危险,我正在考虑从客户代码中删除它们.

任何人都可以看到ends在一个std::string唯一的环境中使用的明显理由吗?

Pet*_*der 7

你基本上回答了你自己的问题是需要的细节.当然,我想不出任何理由使用std::ends的时候std::string,并std::stringstream处理所有的为您服务.

因此,要明确回答您的问题,不,没有理由std::endsstd::string唯一的环境中使用.

  • @Andreas,因为刚刚第一次听到它,你听起来非常确定:) (4认同)

Han*_*ant 6

有些API期望带有多个零终止字符串的"字符串数组",标记结尾的双零.Raymond Chang最近刚刚在博客上发表过关于它的博文,最重要的是要证明这种情况经常发生错误.