Udostępnij za pośrednictwem


Omówienie Declarators

Declarators są składnikami deklarację określić nazwy obiektów lub funkcji.Declarators także określić, czy nazwanego obiektu jest obiekt, wskaźnik, odwołanie lub tablicy.Podczas gdy declarators nie określono typu podstawowego, modyfikować wpisz informacje w podstawowy typ, aby określić typy pochodne, takich jak wskaźniki, odwołania i tablic.Stosowane do funkcji,; niewłaściwy deklarator działa specyfikatora typu pełni określić zwracany typ funkcji obiekt, wskaźnik lub odwołania.(Specyfikatory omówione w deklaracje, przekazać właściwości, takie jak typ i składowania klasy.Modyfikatory, omówione w tej sekcji i w Modyfikatorów specyficzne dla firmy Microsoft, zmodyfikuj declarators.) Poniższy rysunek pokazuje pełną deklarację MyFunctioni wzywa się składniki deklaracji.

Specyfikatory, Modyfikatory i Declarators

Specyfikatory, modyfikatory, deklaratory

Programu Microsoft

Większość firmy Microsoft, rozszerzone słowa kluczowe mogą być używane jako modyfikatory formularza uzyskane typów; nie są one Specyfikatory lub declarators.(Zobacz modyfikatorów specyficzne dla firmy Microsoft.)

KONIEC Microsoft szczególne

Declarators są wyświetlane w składni deklaracji po opcjonalna lista Specyfikatory.Te specyfikatory są omówione w deklaracji. Deklaracja może zawierać więcej niż jeden; niewłaściwy deklarator, ale każdy; niewłaściwy deklarator deklaruje tylko jedną nazwę.

Następującą deklarację przykładowy pokazuje, jak Specyfikatory i declarators są połączone do utworzenia pełnego zgłoszenia:

const char *pch, ch;

W deklaracji poprzedzającego słowa kluczowe const i char listy Specyfikatory.Wymienione dwa declarators: *pch i ch.Oświadczenie, że wiele jednostek deklaruje składa się z specyfikatora typu, następują oddzielone przecinkami listę declarators zakończone średnikiem.

Declarators dla prostych obiektów

Niewłaściwy deklarator proste obiektu, takie jak int lub podwójne jest po prostu jej nazwę, opcjonalne nawiasów.

int i; // declarator is i

int (i); // declarator is (i)

Declarators dla wskaźników, odwołania i tablic

Operatory wskaźnik na początku nazwy powodować, że obiekt wskaźnik lub odwołania.* Operator deklaruje nazwę jako wskaźnik; & operator deklaruje ją jako odwołanie.

int *i; // declarator is *i
int &i; // declarator is &i
int **i; // declarator is **i;

Dołączanie const lub volatile dają te specjalne właściwości wskaźnika.Użycie tych Specyfikatory w; niewłaściwy deklarator (w przeciwieństwie do w specyfikatora typu) modyfikuje właściwości wskaźnik nie wskazał obiektu:

char *const cpc; // const pointer to char 
const char *pcc; // pointer to const char 
const char *const cpcc; // const pointer to const char

Dalsze informacje można znaleźć w const i lotnych wskaźniki.

Wskaźnik do członka klasy lub struktury zadeklarowana ze specyfikatora właściwą nazwę zagnieżdżone:

int X::* pIntMember; 
int ::X::* pIntMember; // the initial :: specifies X is in global scope
char Outer::Inner::* pIntMember; // pointer to char in a nested class

Nawiasy zakrywające opcjonalne wyrażenie stałe po nazwie spowodować, że obiekt jako tablicę.Nawiasy kolejnych zadeklarować dodatkowych wymiarów do macierzy.

int i[5]; // array with five elements of type int numbered from 0 to 4
int i[]; // array of unknown size
char *s[4]; // array of pointers to char
int i[2][2]; // two dimensional array

Declarators dla funkcji

Nawiasy zawierające listy argumentów są używane po nazwie deklarowania funkcji.Następujące deklaruje funkcję typem zwracanym int i trzy argumenty typu int.

int f(int a, int b, int c);

Informacji na temat list argumentów, zobacz Deklaracji funkcji.

Wskaźniki i odwołania do funkcji są uznane za dołączając wskaźnik lub operator odniesienia do nazwy funkcji, jak pokazano poniżej.Nawiasy, zazwyczaj opcjonalne są zobowiązane do rozróżniania wskaźnik do funkcji, od funkcji, która zwraca wskaźnik:

int (*pf)(int); // pointer to function returning int
int *f(int i); // function returning pointer to int
int (&pf)(int); // reference to function 

Wskaźniki do funkcji elementów członkowskich są rozróżniane za Specyfikatory zagnieżdżonych nazw:

int (X::* pmf)(); // pointer to member function of X returning int
int* (X::* pmf)(); // pointer to member function returning pointer to int

Zobacz też wskaźniki do członków.

Funkcje i obiekty w tym samym deklaracji

Funkcje i obiekty mogą być zadeklarowane w tej samej deklaracji w następujący sposób:

int i, *j, f(int k);  // int, pointer to int, function returning int

Składnia może być błąd w niektórych okolicznościach.Następujące oświadczenie:

int* i, f(int k);  // pointer to int, function returning int (not int*)

mogą wyglądać podobnie do deklaracji int wskaźnik i zwracanie funkcji int*, ale nie jest.Wynika to z * jest częścią; niewłaściwy deklarator dla i, nie jest częścią; niewłaściwy deklarator dla f.

Uproszczenie Składnia; niewłaściwy deklarator z elementem typedef

Technika lepsze, jednak jest użycie typedef lub kombinacji nawiasy i typedef słowa kluczowego.Należy wziąć pod uwagę deklarowanie tablicy wskaźników do funkcji:

//  Function returning type int that takes one 
//   argument of type char *.
typedef int (*PIFN)( char * );
//  Declare an array of 7 pointers to functions 
//   returning int and taking one argument of type 
//   char *.
PIFN pifnDispatchArray[7];

Deklaracja równoważne mogą być zapisywane bez typedef deklaracji, ale jest tak skomplikowany, że potencjał dla błędu przekracza jakichkolwiek korzyści:

int ( *pifnDispatchArray[7] )( char * );

Aby uzyskać więcej informacji na element typedef, zobacz typedef specyfikatora.

Wskaźniki, odwołania, tablice pojedynczy typ podstawowy można połączyć w jednej deklaracji (oddzielone przecinkami) jako

int i, *i, &i, i[5];

Bardziej złożone Składnia; niewłaściwy deklarator

  • Wskaźnik, odwołanie, tablica i declarators funkcji mogą być łączone określić takie obiekty jak tablice wskaźników do funkcji, wskaźniki do tablic, itd.

  • Następująca gramatyka cykliczne, które pełni opisano składnię; niewłaściwy deklarator wskaźnik.

  • A declarator jest zdefiniowany jako jeden z:

1. identifier 
2. qualified-name 
3. declarator ( argument-list ) [cv-qualfiers] [exception-spec]
4. declarator [ [ constant-expression ] ] 

5. pointer-operator declarator 
6. ( declarator )
  • i wskaźnik operator jest jednym z:
* [cv-qualifiers]
& [cv-qualifiers]
:: nested-name-specifier * [cv-qualfiers]

Ponieważ; niewłaściwy deklarator może zawierać declarators, jest możliwe do skonstruowania bardziej złożonych typów pochodnych, takie jak tablice wskaźniki, funkcje zwracanie tablice wskaźników funkcji przy użyciu powyższych zasad.Do utworzenia każdego etapu budowy, rozpoczynać identyfikator reprezentujący typ danych podstawowych i stosuje reguły składni powyżej z poprzednim wyrażeniu jako declarator.Zamówienie, stosuje się reguły składni należy odwrotnej sposób wyrażenia jest podane w języku angielskim.Jeśli zastosowanie wskaźnik operator reguły składni wyrażenia tablicy lub funkcji używać nawiasów, jeśli chcesz, aby wskaźnik do tablicy lub funkcji, jak w ostatni wiersz w tabeli poniżej.

Poniższy przykład pokazuje budowy "wskaźnik do tablicy wskaźników 10 do int".

Ustne wyrażenie

Niewłaściwy deklarator

Zastosować regułę składni

i

1

Pointer(s) do

*i

5

Tablica 10

(*i)[10]

4

wskaźnik

*((*i)[10])

6, a następnie 5

Kiedy wielu wskaźnik odwołać, tablicy lub działać Modyfikatory są używane, declarators może stać się dość skomplikowane.Temat Interpretowania więcej złożonych Declarators w tym artykule opisano sposób odczytywania bardziej złożonych Składnia; niewłaściwy deklarator.Temat jest stosowany zarówno c i C++, chociaż w języku C++, gdziekolwiek * jest używany do wskazania wskaźnika kwalifikowanej nazwy takie jak MojaKlasa:: * mogą służyć do określania wskaźnik do członka klasy.

Zobacz też

Informacje

Declarators