>백엔드 개발 >C++ >C 11의 `std::벡터::resize()` 인터페이스가 효과적으로 새 요소의 값을 초기화합니까?

C 11의 `std::벡터::resize()` 인터페이스가 효과적으로 새 요소의 값을 초기화합니까?

DDD
DDD원래의
2024-12-26 14:11:14362검색

Does C  11's `std::vector::resize()` Interface Change Effectively Value-Initialize New Elements?

std::Vector::resize() 및 Boost.Container의 resize() 동작 조사

C 03에서 std::Vector: :resize()는 제공된 값의 복사본으로 새로 할당된 요소를 초기화했습니다. C 11에서는 값 초기화 또는 복사를 통한 초기화를 허용하는 오버로드를 도입했습니다.

C 11과 유사한 세 가지 resize() 오버로드를 지원하는 Boost.Container의 벡터를 사용하여 동작을 확인하기 위한 테스트를 수행했습니다. C 03 모드에서는 std::Vector와 Boost.Container의 벡터가 모두 예상대로 작동하여 새 요소를 0으로 초기화했습니다.

그러나 C 11 모드에서는 std::Vector와 Boost.Container의 벡터가 모두 여전히 초기화되었습니다. 값 초기화를 위한 오버로드를 사용할 때 0이 있는 새 요소. 이는 다음과 같은 질문을 제기합니다.

C 11 std::Vector::resize() 인터페이스 변경이 실제로 효과적인가요?

결과에 따르면 인터페이스 변경이 의도한 효과를 얻지 못한 것으로 나타났습니다. 새로운 요소는 여전히 두 곳 모두에서 초기화되고 있습니다.

부록

기존 할당자의 한계를 해결하기 위해 대체 할당자 어댑터가 제안되었습니다. 모든 유형의 요소 초기화:

template <typename T, typename A=std::allocator<T>>
class default_init_allocator : public A {
  // ... implementation
};

이 어댑터는 constructor() 호출에 개입합니다. 값 초기화, 이를 기본 초기화 호출로 변환합니다. 또한 기본 초기화를 올바르게 처리합니다.

위 내용은 C 11의 `std::벡터::resize()` 인터페이스가 효과적으로 새 요소의 값을 초기화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.