两个相同的程序使用Boost::标记化器,但有两个不同的输出
Two same programs using Boost::tokenizer, but two different outputs
下面的C++程序
#include <iostream>
#include <boost/tokenizer.hpp>
using namespace std;
int main()
{
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
string s ("(0,30,0)");
tokenizer tokens(s.substr(1,s.size()-2), boost::char_separator<char>(","));
for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter)
cout<<*tok_iter<<endl;
return 0;
}
由于它输出CCD_ 1而不是CCD_。。。
但如果我稍微改变一下:
#include <iostream>
#include <boost/tokenizer.hpp>
using namespace std;
int main()
{
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
string s ("(0,30,0)");
//Modified lines:
string t (s.substr(1,s.size()-2));
tokenizer tokens(t, boost::char_separator<char>(","));
for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter)
cout<<*tok_iter<<endl;
return 0;
}
它工作正常!这怎么可能?乍一看,我认为这两个版本是一样的。。。
在第一个示例中,s.substr(1,s.size()-2)
返回一个临时对象,其生存期在表达式结束时到期。然而,boost::tokenizer
有一个接受常量引用的构造函数,这意味着只要引用存在,对象的生存期就会延长。问题是boost::tokenizer
只存储对传入引用的迭代器,因此对对象的引用过期,迭代器现在无效。
相关文章:
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 为什么这个scanf()的两个不同的输入会给出两个不同的输出?
- 为什么这两个版本的代码给出不同的输出
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 如何在 main 函数中输出两个新字符串C++?
- 在函数中连接两个字符,并在 C++ 中返回输出
- 为什么两个模板函数的输出不同?
- 当直接渲染到WASAPI时,两个流中的一个流没有音频输出
- 当被一个输入分开时,有两个控制台输出同时显示
- 为什么要更改这两个代码的输出"&"字符?
- C++问题,我的两个源代码应该具有相同的输出,但它们是不同的
- STL:在没有输出的情况下处理两个集合
- 为什么这两个代码给出不同的输出?// bits.c float_i2f
- 无法在同一行上获取输出,在 C++ 中两个输出之间有空格
- 将两个使用C++流的共享库导入 python 会导致输出损坏
- 如果两个输入流相等,我如何构造主()到输出是
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 这是循环击中两个输出,而不仅仅是我期望的输出
- C++ If/else 打印出两个输出