가 사용하는 std::배열<T, N=""> 리드하는 코드 블?[중복]
문제
본에서 몇 가지 장소를 사용하는 것이 추천 std::array
C-일 배열 C++의 주장,그것은 더 나은,더 안전한 대안이 없는 오버헤드가 발생합니다.보:
표준 컨테이너 편[...]없는 공간의 간접비를 넘어 그것을 요구하는 요소,[...].다시 말해서,그것은 매우 많 내장 배열없이 문제입니다.(C++11FAQ)
그러나 나는 그것을 이해되고,템플릿을 컨테이너가 이 는 오버헤드로 프로그램의 크기에 간 것이기 때문에,이에 대한 코드를 생성하는 모든 다른 N 배열은 인스턴스이다.
내 프로그램을 사용하는 std::array
다양한 장소에서 여러 가지 다른 정수를 위한 것입니다,이것을 이끌게 부풀어 코드?은 그것을 무시할 수?
어야 나는 이에 대해 걱정을 위한 비형식 템플릿에서 매개 변수는 일반적인?
해결책
난 그것에 대해 걱정.을 살펴보면 인터페이스 std::array<T, N>
,그것은 매우 작고 대부분의 구성원 기능을(기본적으로 제공하는 래퍼 포인터를 조작)는 한-라이너 완전하게 될 것입니다 최적화된 멀/인라인하여 어떤 점잖은 컴파일러에서 릴리스 모드를 최적화 수준이다.
또한, 당신이 지불하지 않을 위해 당신이 무엇을 사용하지 않는 때문에 사용하지 않는 비주얼(std::array<T, N>
이 없 virtual
회원 기능)클래스의 템플릿을 보장하지 않는 것 인스턴스화됩니다.작은 표준을 인용:
14.7.1 암시적 인스턴스화[temp.inst]
11 구현하지 않는 암시적으로 인스턴스화 기능 템플릿 변수는 템플릿 구성원 템플릿,가상이 아닌 구성원 기능,멤버 클래스 또는 정적 데이터 구성원의 템플릿 클래스 을 필요로하지 않는 인스턴스화.[...]
거기에는 또한 몇몇 과부 관계형 연산자 ==
고 <
는 것은 의미가 해당하는 std::equal
고 std::lexicographical_compare
.실제로 이러한 운영해야 될 구현의 관점에서 이러한 알고리즘은(불평하의 공급업체 그렇지 않은 경우).
만 아주 작은 걱정하는 것은 약간의 추가 컴파일시버지만이 있어야 영 코드 크기의 및 런타임 오버헤드가 발생합니다.
관련 하지만 동일하지 않:이 기술 보고서에서는 C++성능 많은 조심 벤치마크에서 얇은 클래스는 래퍼는 내장형(int
, double
)고 제로에 가까운 오버헤드를 위해 2006 년 컴파일러 기술입니다.을 반복할 수 있는 테스트 서비스 이를 확인하려면에 대한 std::array<T,N>
대 T[N]