나는 operator[]
을 사용하는 것이 잘못되었다고 들었다.연산자 [] - 왜 사용하지 않아야합니까?
vector<double> * IDs;
...
IDs->operator[](j) = 1;
과 : 사이의 차이가 무엇
모든
vector<double> * IDs;
...
(*IDs)[j] = 1;
나는 operator[]
을 사용하는 것이 잘못되었다고 들었다.연산자 [] - 왜 사용하지 않아야합니까?
vector<double> * IDs;
...
IDs->operator[](j) = 1;
과 : 사이의 차이가 무엇
모든
vector<double> * IDs;
...
(*IDs)[j] = 1;
아무것도, 그들은 동일합니다.
두 가지
1)하지만 IDs->operator[](j)
는 (*IDs)[j]
보다 분명하다.
2) 대신 const vector<double>& IDs
을 사용할 수있는 경우 더 명확한 IDs[j]
의 혜택을 얻을뿐만 아니라 IDs
을 사용하여 벡터를 수정할 수 없다는 사실을 통해 안정감을 얻을 수 있습니다.
당신의 코드는 당신보다 덜 능력있는 사람에 의해 유지 될 것이므로 명료도가 중요하다는 것을 기억하십시오.
'const'는 "불변성"을 의미하지 않는다. ID가 아니고 벡터도 아닙니다. –
R. Martinho Fernandes에 대해 자세히 설명해 주시겠습니까? std :: vector에서 const가 아닌 멤버 함수를 호출 할 수 없다는 점이 마음에 듭니다. – Bathsheba
http://coliru.stacked-crooked.com/view?id=93ceeeae2034b6099a70639b71cebab1-50d9cfc8a1d350e7409e81e87c2653ba –
이 연산자를 사용하는 전체 아이디어는 실제 데이터 구조 나 데이터 구성 자체가 숨겨 지지만 외부에서는 배열과 같은 인터페이스를 제공하는 방식으로 []를 사용할 수 있다는 것입니다.
예 : 벡터와 deques는 모두 다르게 구현되고 다른 목적을 위해 더 나은 퍼포먼스를 가지지 만, 바깥 쪽에서는 [[]를 제공하여 사용자가 동적 배열을 사용하는 것처럼 느껴지도록합니다.
그래서, 그것은 잘못이 아니지만 그 목적을 이깁니다.
등가입니다. – chris
글쎄, 더 쓰려면 ... :) –