2016-12-15 8 views
1
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input[-1] <<endl; 

통해 벡터 부정적인 지표를 결과한다 액세스 : 입력 인덱스 -1 것은 : 0 그러나 우리 때라도 사용할 경우 :연산자 [] 및 .at()는 코드 위 사용

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input.at(-1) <<endl; 

결과는 다음과 같습니다. 색인 -1에 입력 한 내용은 다음과 같습니다. libC++ abi.dylib : 유형 std :: out_of_range : vector의 캐치되지 않는 예외로 종료.

나에게 이유를 설명 할 수 있습니까? 고맙습니다.

답변

7

at 구성원은 범위 검사를 적절하게 수행합니다.

operator []. 이것은 정의되지 않은 동작이며 코드의 버그입니다.

이것은 문서에 명시되어 있습니다.

+0

버그가 어떤 것인지 알려주실 수 있습니까? 그것은 모든 입력 벡터에 대해 보이지만 -1의 인덱스는 연산자 []를 사용할 때 항상 0입니다. – Feng

+1

@ FengZhou 그 위치에 '0'이 표시되는 것은 우연의 일치입니다. 그것은 여전히 ​​불법적 인 성명서입니다. 벡터의 내용을보고 있습니다. 볼 수없는 콘텐츠에는 '0'이 포함되어 있습니다. –

+0

감사합니다. 응, 우연의 일치 야. – Feng

2

첫 번째 동작은 정의되지 않은 동작입니다. 어떤 일이든 일어날 수있다. 어떤 일이 있어도 불평 할 수 없습니다.

두 번째 예외가 throw되고 catch하지 않으므로 std::terminate()이 호출되고 프로그램이 종료됩니다. 끝.