흥미로운 내용을 갖도록 const 벡터를 초기화하는 방법을 묻는 경우 대답은 아마도 복사 생성자를 사용하는 것입니다. 먼저 벡터를 힘들게 채운 다음 여기에서 새로운 const 벡터를 만듭니다. 또는 vector<InputIterator>(InputIterator, InputIterator)생성자 템플릿을 사용하여 다른 종류의 컨테이너 또는 배열에서 초기화 할 수 있습니다 . 배열이라면 초기화 목록으로 정의되었을 수 있습니다.
이와 같은 것이 당신이 원하는 것에 가깝기를 바랍니다.
const T ra[3] = {t1, t2, t3};
const vector<const T> v(ra, ra+3);
벡터를 취하는 함수에 const 벡터를 전달하는 방법을 묻는다면 답은 다음 중 하나입니다.
- 함수가 벡터를 변경할 수 있고 객체 / 참조가 const이므로 할 수 없습니다. 원본의 상수가 아닌 복사본을 만들어 전달합니다.
또는
const_cast상수가 아닌 벡터를 사용하는 함수로 전달하기 위해 상수를 제거하는 데 사용 합니다.하지만 알고있는 것은 벡터를 수정하지 않습니다.
후자는 고글을 보는 사람이 고글에 대해 의견을 말하고 아무것도하지 않는다는 사실을 알리는 것 중 하나입니다. 그것은 정확히 무엇 const_cast을위한 것이지만, 만약 당신이 필요하다면 const_cast, 당신은 이미 패배 했다는 합리적으로 강력한 주장이 있습니다 .
이 두 가지 작업을 모두 수행하는 것은 (복사 생성자로 상수가 아닌 벡터에서 const 벡터를 만든 다음 상수를 캐스트하는 것) 확실히 잘못된 것입니다. 방금 비 상수 벡터를 사용 했어야합니다. 따라서이 중 하나만 선택하여 수행하십시오.
[ 편집 :vector<T> 과 (와) 의 차이점에 대해 이야기하고 있음을 확인했습니다 const vector<const T>. 불행히도 STL에서 vector<const T>와 vector<T>전혀 관계가없는 유형, 그리고 그들 사이에 변환 할 수있는 유일한 방법은 복사하는 것입니다. 이것은 벡터와 배열의 차이입니다. a는 T**조용하고 안전하게 const T *const *] 로 변환 될 수 있습니다 .