小编Eri*_*ika的帖子

像istream :: getline()之类的东西,但有替代的delim字符?

获得效果的最简洁方法是istream::getline(string, 256, '\n' OR ';')什么?

我知道写一个循环非常简单,但我觉得我可能会遗漏一些东西.我呢?

我用过的:

while ((is.peek() != '\n') && (is.peek() != ';'))
    stringstream.put(is.get());
Run Code Online (Sandbox Code Playgroud)

c++ getline text-parsing istream

5
推荐指数
1
解决办法
1253
查看次数

初始化错误值坏样式后抛出异常?

以下定义是坏风格还是普通错误?也就是说,初始化一个被认为不正确的值之后抛出是不对的?

myClass::myClass(int arg) : value(arg)
   {
    if (value < 0)
       throw (myException("Negative value not allowed!"));
   }
Run Code Online (Sandbox Code Playgroud)

似乎最好使用intializer-list而不是在正文中赋值,并且根据我的理解,如果我分配了值之后之前抛出它并不重要.

c++ initialization exception

3
推荐指数
1
解决办法
221
查看次数

取消引用一个超出范围的矢量迭代器 - 什么是开心的,为什么?

在我的设置上运行:

  vector<int> myvector;
  for (int i=1; i<=5; i++) myvector.insert(myvector.end(),i);

  vector<int>::iterator it;
  for ( it=myvector.begin() ; it < myvector.end()+2; it++ )
    cout << " " << *it;
Run Code Online (Sandbox Code Playgroud)

产量:

1 2 3 4 5 0 0

我原本以为尝试取消引用超出范围的迭代器会导致段错误.但它似乎产生了向量中包含的类型的空或默认初始化对象.

这是明确定义的行为吗?这个属性来自迭代器还是来自向量?迭代器在某种意义上是否会捕获超出范围的异常,而是返回一个空对象?

我尝试在C++ 11参考中找到这个,但感觉它有点过头了.

c++ iterator vector

2
推荐指数
1
解决办法
2806
查看次数