UFO ET IT

std :: vector 대신 QVector (Qt)를 사용하는 이유

ufoet 2021. 1. 8. 20:57
반응형

std :: vector 대신 QVector (Qt)를 사용하는 이유


저는 C ++ 및 Qt를 처음 접했지만 C # / Java는 매우 잘합니다.

요점은 크로스 플랫폼을 좋아하지만 Qt와 헷갈 린다는 것입니다. std::vector이미 크로스 플랫폼 이 아닌가? Qt는 크로스 플랫폼이 아닌 것과 동등한 것을 제공하지 않습니까?

또한 방법입니다 FileQFile다른?

링크가 좋을 것입니다, 감사합니다 :)


이 기사는 좋아 보인다. Qt 템플릿 라이브러리와 표준 템플릿 라이브러리를 비교합니다.

기사에 나열된 모든 차이점을 보면 흥미로울 것입니다.

편집하다:

흥미로운 점은 다음과 같습니다.

제 생각 에는 QTL가장 큰 장점은 Qt가 지원하는 모든 OS에서 동일한 구현 (바이너리 호환성 포함)이 있다는 것 입니다. 일부 STL 구현은 성능면에서 동등 이하이거나 기능이 누락 될 수 있습니다. 일부 플랫폼에는 STL도 없습니다! 반면에 STL은 더 많은 사용자 정의가 가능하며 헤더 파일에서 전체적으로 사용할 수 있습니다. 제가 말했듯이 확실한 승자는 없습니다 .

그가 말했듯이 명확한 승자는 없습니다. 그러나 여전히 기사를 읽으면 많은 것을 분명히 알 수 있습니다. 다른 사람을 모르고 한 사람을 찾는 것보다 차이를 아는 것이 낫습니다.


QVector 클래스는 참조 횟수가 계산되며 복사없이 공유되도록 조정됩니다. Qt는 STL 컨테이너에 해당하는 많은 컨테이너를 제공합니다. 내부에 대한 설명과 약간의 근거와 함께이를 설명하는 문서 :


에서 이상 여기 :

Qt는 C ++ 및 표준 라이브러리가 표준화되지 않았거나 컴파일러에서 잘 지원되지 않았던시기에서 시작되었습니다. 따라서 컨테이너 및 유형 정보와 같이 현재 표준 라이브러리에있는 많은 항목을 복제합니다. 가장 중요한 것은 신호를 제공하기 위해 C ++ 언어를 수정하여 Qt 클래스가 비 Qt 클래스와 함께 쉽게 사용될 수 없도록했다는 것입니다.


C ++ std::vector는 C ++ 표준의 일부이기 때문에 크로스 플랫폼입니다. 모든 C ++ 호환 컴파일러는이를 제공해야합니다.

나는 Qt에 익숙하지 않지만 문서에서 이것을 보았습니다 .

참고 :이 클래스의 모든 기능은 재진입 가능합니다.

또한 QVector 클래스가 Qt 중심 객체를 보유하기 위해 더 쉽게 통합 될 가능성이 있습니다 (추론) std::vector. 다시 말하지만 저는 Qt에 익숙하지 않으므로 직접 결정해야합니다.

경험상 (많은 예외가있는) std::vector라이브러리 별 컨테이너 클래스를 사용해야하는 설득력있는 이유가 없으면 사용하는 경향이 있습니다 .


내가 가진 나쁜 경험 QTLQTL예외를 제기하지 않는 것과 관련이 있습니다 . 이로 인해 심각한 오류를 추적하고 수정하기가 더 어려워집니다. 또한 STL라이브러리의 일부에는 언어에 대한 컴파일러 별 확장이 필요하기 때문에 구현은 컴파일러와 밀접한 관련이 있습니다. 즉, STL구현이 종종 QTL. 그래도 디버깅 문제는 중요했습니다.


답변이 언급되지 않았기 때문에 QVector일반적으로을 포함한 Qt 컨테이너에는 .NET과 비교할 때 일정량의 추가 편의성을 제공하고 자세한 정보가 줄어드는 완전한 API가 있습니다 std::vector.

QVector실제로 Qt API에 통합되지 않았고, 그 역할은 misfit QList의해 취해졌습니다 . 따라서 QVectorQt API와의 전반적으로 더 나은 호환성을 위해 사용하는 것은 실제로 강력한 주장이 아닙니다 . 의 단점이 QList점점 더 인식됨에 따라 Qt 6에서 변경 될 수 있습니다 .

즉, 응용 프로그램에 이미 Qt를 사용하고 있다면 QVector편의 를 위해 사용하는 것이 좋습니다 . 나는 아무도 한두 개의 컨테이너에 대해 Qt와 같은 부풀어 오른 종속성을 추가하지 않을 것이라고 가정합니다. QVector효율적이고 견고한 성능이며 Qt가 지원하는 모든 플랫폼에서 문제없이 실행됩니다.

반면에 프레임 워크에 구애받지 않는 핵심 로직 API를 만들고 싶다면 가능하면 표준 C ++로 개발하는 것이 좋습니다. 따라서 특정 GUI 프레임 워크에 묶여 있지 않은 이식성을 얻을 수 있습니다. 필요한 경우 나중에 다른 것으로 쉽게 마이그레이션 할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/5623218/why-use-qvectorqt-instead-of-stdvector

반응형