2013-05-30 3 views
1

나는 operator[]을 사용하는 것이 잘못되었다고 들었다.연산자 [] - 왜 사용하지 않아야합니까?

vector<double> * IDs; 
... 
IDs->operator[](j) = 1; 

과 : 사이의 차이가 무엇

모든

vector<double> * IDs; 
... 
(*IDs)[j] = 1; 
+3

등가입니다. – chris

+5

글쎄, 더 쓰려면 ... :) –

답변

2

아무것도, 그들은 동일합니다.

두 가지

1)하지만 IDs->operator[](j)(*IDs)[j]보다 분명하다.

2) 대신 const vector<double>& IDs을 사용할 수있는 경우 더 명확한 IDs[j]의 혜택을 얻을뿐만 아니라 IDs을 사용하여 벡터를 수정할 수 없다는 사실을 통해 안정감을 얻을 수 있습니다.

당신의 코드는 당신보다 덜 능력있는 사람에 의해 유지 될 것이므로 명료도가 중요하다는 것을 기억하십시오.

+1

'const'는 "불변성"을 의미하지 않는다. ID가 아니고 벡터도 아닙니다. –

+0

R. Martinho Fernandes에 대해 자세히 설명해 주시겠습니까? std :: vector에서 const가 아닌 멤버 함수를 호출 할 수 없다는 점이 마음에 듭니다. – Bathsheba

+0

http://coliru.stacked-crooked.com/view?id=93ceeeae2034b6099a70639b71cebab1-50d9cfc8a1d350e7409e81e87c2653ba –

0

이 연산자를 사용하는 전체 아이디어는 실제 데이터 구조 나 데이터 구성 자체가 숨겨 지지만 외부에서는 배열과 같은 인터페이스를 제공하는 방식으로 []를 사용할 수 있다는 것입니다.

예 : 벡터와 deques는 모두 다르게 구현되고 다른 목적을 위해 더 나은 퍼포먼스를 가지지 만, 바깥 쪽에서는 [[]를 제공하여 사용자가 동적 배열을 사용하는 것처럼 느껴지도록합니다.

그래서, 그것은 잘못이 아니지만 그 목적을 이깁니다.

관련 문제