문제

본에서 몇 가지 장소를 사용하는 것이 추천 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::equalstd::lexicographical_compare.실제로 이러한 운영해야 될 구현의 관점에서 이러한 알고리즘은(불평하의 공급업체 그렇지 않은 경우).

만 아주 작은 걱정하는 것은 약간의 추가 컴파일시버지만이 있어야 영 코드 크기의 및 런타임 오버헤드가 발생합니다.

관련 하지만 동일하지 않:이 기술 보고서에서는 C++성능 많은 조심 벤치마크에서 얇은 클래스는 래퍼는 내장형(int, double)고 제로에 가까운 오버헤드를 위해 2006 년 컴파일러 기술입니다.을 반복할 수 있는 테스트 서비스 이를 확인하려면에 대한 std::array<T,N>T[N]

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top