- 使用 [ ] 操作符(operator),例如:v[1] = 100
- 使用 at() 方法,例如:v.at(1) = 100;
使用 [ ] 操作符(operator),若索引超出範圍,不會丟出 exception
使用 at() 方法,若索引超出範圍,會丟出 out_of_range 的 exception
所以若用 [ ] 的方式存取資料,便無法使用 try...catch...捕捉例外
#include "stdafx.h" #include <iostream> #include <vector> int _tmain(int argc, _TCHAR* argv[]) { std::vector <int> vInt; try { vInt.at(1) = 100 ; // throw out_of_range // vInt[1] = 100 ; // 不會丟出 exception }catch (std::out_of_range& oor){ std::cout << "out_of_range"; }catch(std::exception& e){ std::cout << "exception"; } return 0; }
用 [] 存取資料,超出範圍,程式停止執行時的錯誤訊息
Expression:vector subscript out of range
用 at() 存取資料,超出範圍,若沒使用 try...catch... 處理,程式停止執行時的錯誤訊息
exception: std::out_of_range at memory location
參考:
Visual C++ Try Catch Exception block not entered
Accessing elements of a vector in C++?
Which vector threw index out of range exception?
why when I use std:vector and operator [] In out of range case don't get a exception?
http://www.cplusplus.com/reference/vector/vector/operator%5B%5D/
http://www.cplusplus.com/reference/vector/vector/at/
感謝分享!!
回覆刪除