> 백엔드 개발 > C++ > 본문

로컬 클래스를 C 11의 STL 알고리즘에 대한 조건자로 사용할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-21 05:04:39
원래의
569명이 탐색했습니다.

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

STL 알고리즘과 함께 로컬 클래스 사용: 로컬 유형 제한 풀기

C 프로그래밍 영역에서 로컬 클래스는 오랫동안 허용되지 않았습니다. STL 알고리즘에 대한 술어는 기본 제한 사항과 그 제한 사항에 대한 질문을 제기합니다. 근거.

C 98/03 표준은 로컬 클래스를 포함하여 로컬 유형을 템플릿 인수로 명시적으로 금지합니다. 표준의 14.3.1조에는 "로컬 유형 [...]을 템플릿 유형 매개변수에 대한 템플릿 인수로 사용해서는 안 됩니다."라고 명시되어 있습니다.

이 제한의 근거는 임시 지역 유형의 성격. 제한된 범위 내에 존재하기 때문에 예기치 않게 파괴가 발생할 수 있으며 STL 알고리즘의 조건부로 사용될 경우 정의되지 않은 동작으로 이어질 수 있습니다.

그러나 C 11의 출현으로 이러한 제한이 해제되었습니다. 개정된 표준에서는 로컬 유형을 템플릿 인수로 사용하여 로컬 클래스가 STL 알고리즘의 조건자로 사용될 수 있도록 허용합니다.

예를 들어 다음 코드 조각을 고려하세요.

#include <algorithm>
#include <vector>

int main() {
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(array, array + 10);

    struct even {
        bool operator()(int x) { return !(x % 2); }
    };
    std::remove_if(v.begin(), v.end(), even());
}
로그인 후 복사

In 이 코드에서는 로컬 클래스가 짝수를 확인하는 조건자를 정의하기도 합니다. 이제 이 클래스를 벡터 v에서 모든 짝수를 제거하는 std::remove_if 알고리즘에 대한 인수로 직접 사용할 수 있습니다.

로컬 유형에 대한 제한은 처음에는 잠재적인 정의되지 않은 동작을 방지하기 위한 것이었지만, C 11에서 이 기능이 제거되면서 함수형 프로그래밍 시나리오에서 로컬 클래스를 사용할 수 있는 새로운 가능성이 열렸습니다.

위 내용은 로컬 클래스를 C 11의 STL 알고리즘에 대한 조건자로 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿