cp.*_*ngr 1 c++ stl try-catch c++11
vector如果该成员存在,我想将a成员的副本分配给另一个变量.如果没有,则不应进行任何分配.不得对此进行任何更改vector.
我可以做try/ catch方法,或if(exists)/做方法.是否有理由偏爱另一个?即鉴于此
const vector<int> v = {}; // or maybe {1, 2, 5}
int myInt;
Run Code Online (Sandbox Code Playgroud)
传统的条件方法:
if (v.size() >= 2)
{
myInt = v.at(1);
// or myInt = v[1];
}
Run Code Online (Sandbox Code Playgroud)
试着抓:
try
{
myInt = v.at(1);
}
catch(std::out_of_range)
{
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这主要取决于您自己对异常的看法.(在我看来)给予他们的通常属性是"异常应该是例外".
如果在正常执行中你将抛出该异常,只是因为你不想编写检查存在,那么这将违背上述语句.
其原因主要是堆栈展开并不总是那么便宜.虽然,可能是vector :: at会被内联,并且没有堆栈可以展开.也许编译器甚至可以优化该异常.
如果您通常调试向量访问,它可能仍然是一个麻烦.例如,如果要捕获所有out_of_bounds异常以跟踪非描述性错误消息,那么如果在正常操作期间继续抛出这些异常,则会更难.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |