我想一个更清洁的方式来获得以下功能,捕捉AError和BError在一个块:
try
{
/* something */
}
catch( AError, BError $e )
{
handler1( $e )
}
catch( Exception $e )
{
handler2( $e )
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?或者我必须单独抓住它们?
AError并且Berror有一个共享的基类,但是它们也与我想要的其他类型共享它handler2,所以我不能只捕获基类.
我知道增量/减量运算符的后缀版本通常会由内置类型的编译器优化(即不会进行复制),但这是iterators 的情况吗?
他们本质上只是重载运营商,并且可以在任何数量的方式来实现,但由于他们的行为被严格定义,可以自己进行优化,如果是这样,他们是通过任何/很多编译器?
#include <vector>
void foo(std::vector<int>& v){
for (std::vector<int>::iterator i = v.begin();
i!=v.end();
i++){ //will this get optimised by the compiler?
*i += 20;
}
}
Run Code Online (Sandbox Code Playgroud) 说我有以下代码:
typedef std::map< int, std::string >::iterator Iterator;
Iterator iter = myMap.begin();
while (iter != myMap.end())
{
Iterator current = iter;
++iter;
maybeDeleteElement( current ) // may call erase.
}
Run Code Online (Sandbox Code Playgroud)
鉴于它std::map是作为红黑树实现的,是否保证地图中的每个元素都只被访问一次?或者修改地图会导致树重新平衡,从而改变迭代序列?
注意:这不是关于任何迭代器是否将被无效的问题.但是迭代器仍然有效并不一定意味着递增它将为您提供与之前相同的下一个元素.