获得效果的最简洁方法是istream::getline(string, 256, '\n' OR ';')什么?
我知道写一个循环非常简单,但我觉得我可能会遗漏一些东西.我呢?
我用过的:
while ((is.peek() != '\n') && (is.peek() != ';'))
stringstream.put(is.get());
Run Code Online (Sandbox Code Playgroud) 以下定义是坏风格还是普通错误?也就是说,在初始化一个被认为不正确的值之后抛出是不对的?
myClass::myClass(int arg) : value(arg)
{
if (value < 0)
throw (myException("Negative value not allowed!"));
}
Run Code Online (Sandbox Code Playgroud)
似乎最好使用intializer-list而不是在正文中赋值,并且根据我的理解,如果我在分配了值之后或之前抛出它并不重要.
在我的设置上运行:
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参考中找到这个,但感觉它有点过头了.