수색…


소개

키워드using 하는 typedef 와 (C ++ 11 이후) 기존 유형에 새로운 이름을 부여하는 데 사용할 수 있습니다.

통사론

  • typedef 타입 지정자 seq init-declarator-list ;
  • 속성 지정자 seq typedef 선언자 지정자 seq init-declarator-list ; // C ++ 11 이후
  • 식별자를 사용하여 속성 지정자 - seq ( opt ) = type-id ; // C ++ 11 이후

기본 typedef 구문

typedef 선언은 변수 또는 함수 선언과 동일한 구문을 갖지만 typedef 라는 단어를 포함합니다. typedef 있으면 선언을 통해 변수 나 함수 대신 유형을 선언합니다.

int T;         // T has type int
typedef int T; // T is an alias for int

int A[100];         // A has type "array of 100 ints"
typedef int A[100]; // A is an alias for the type "array of 100 ints"

유형 별명이 정의되면 유형의 원래 이름과 같은 의미로 사용할 수 있습니다.

typedef int A[100];
// S is a struct containing an array of 100 ints
struct S {
    A data;
};

typedef 는 구별 유형을 작성하지 않습니다. 기존 유형을 참조하는 다른 방법을 제공합니다.

struct S {
    int f(int);
};
typedef int I;
// ok: defines int S::f(int)
I S::f(I x) { return x; }

typedef의보다 복잡한 사용

typedef 선언은 일반적인 변수 및 함수 선언과 동일한 구문을 사용하여 더 복잡한 선언을 읽고 쓸 수 있습니다.

void (*f)(int);         // f has type "pointer to function of int returning void"
typedef void (*f)(int); // f is an alias for "pointer to function of int returning void"

이는 비 정적 멤버에 대한 포인터와 같이 혼동하는 구문을 사용하는 구문에 특히 유용합니다.

void (Foo::*pmf)(int);         // pmf has type "pointer to member function of Foo taking int
                               // and returning void"
typedef void (Foo::*pmf)(int); // pmf is an alias for "pointer to member function of Foo
                               // taking int and returning void"

숙련 된 프로그래머라도 다음 함수 선언의 구문을 기억하기는 어렵습니다.

void (Foo::*Foo::f(const char*))(int);
int (&g())[100];

typedef 를 사용하여 읽기 쉽고 쓸 수 있습니다.

typedef void (Foo::pmf)(int);  // pmf is a pointer to member function type
pmf Foo::f(const char*);       // f is a member function of Foo

typedef int (&ra)[100];        // ra means "reference to array of 100 ints"
ra g();                        // g returns reference to array of 100 ints

typedef로 여러 유형 선언

typedef 키워드는 지정자이므로 각 선언자에 개별적으로 적용됩니다. 따라서 선언 된 각 이름은 typedef 가 없을 때 그 이름이 가질 유형을 참조합니다.

int *x, (*p)();         // x has type int*, and p has type int(*)()
typedef int *x, (*p)(); // x is an alias for int*, while p is an alias for int(*)()

"using"을 사용한 별칭 선언

C ++ 11

구문의 using 정의 할 수있는 이름 왼편에 진행하고, 정의는 오른쪽 간다 : 매우 간단하다. 이름이 어디인지를 검사 할 필요가 없습니다.

using I = int;
using A = int[100];             // array of 100 ints
using FP = void(*)(int);        // pointer to function of int returning void
using MP = void (Foo::*)(int);  // pointer to member function of Foo of int returning void

usingusing 유형 별명을 작성하는 것은 typedef 로 유형 별명을 작성하는 것과 완전히 동일한 효과 using 갖습니다. 같은 것을 달성하기위한 대체 구문 일뿐입니다.

typedef 와는 달리, using 을 템플릿화할 수 있습니다. usingusing 작성된 "템플리트 typedef"를 별명 템플리트 라고합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow