Sdílet prostřednictvím


Přehled Declarators

Declarators jsou součástí prohlášení, které zadejte názvy objektů nebo funkcí.Declarators také určit, zda je objekt pojmenovaný objekt, ukazatele, odkazu nebo matice.Zatímco declarators nelze určit základní typ, neupravujte informace typu v základní typ zadat odvozené typy ukazatelů, odkazy a matice.Použita funkce, declarator pracuje s specifikátor typu plně určit návratový typ funkce být objekt, ukazatel nebo odkaz.(Specifikátory, které jsou popsány v prohlášení, vlastnosti, jako je například úložiště a typ třídy vyjádřit.Modifikátory, které jsou popsány v této části a v Microsoft specifické modifikátory, declarators změnit.) Následující obrázek ukazuje úplné prohlášení o MyFunctiona volá mimo součásti prohlášení.

Specifikátory, Modifikátory a Declarators

Specifikátory, modifikátory, deklarace

Konkrétní společnosti Microsoft

Většina rozšířených klíčová slova lze použít jako modifikátory formuláře Microsoft odvozené typy; nejsou specifikátory nebo declarators.(Viz Microsoft specifické modifikátory.)

Konec konkrétní společnosti Microsoft

Declarators se v syntaxi prohlášení po volitelný seznam identifikátorů.Tyto specifikátory jsou popsány v prohlášení. Prohlášení může obsahovat více než jeden declarator, ale každý declarator prohlašuje pouze jeden název.

Následující prohlášení vzorek ukazuje, jak kombinovat specifikátory a declarators tvoří kompletní prohlášení:

const char *pch, ch;

V předchozích prohlášení klíčová slova const a char seznamu specifikátory.Jsou uvedeny dva declarators: *pch a ch.Prohlášení, že prohlašuje více entit tvoří specifikátor typu následuje čárkami oddělený seznam declarators, oddělena středníkem.

Declarators pro jednoduché objekty

Název declarator jednoduché objektu, jako například int nebo dvojité není jednoduše nepovinné závorky.

int i; // declarator is i

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

Declarators ukazatele, odkazy a matice

Ukazatel operátory vložili z názvu způsobit objekt do ukazatele nebo odkaz.* Operátor deklaruje název jako ukazatel; & operátor je deklaruje jako odkaz.

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

Přidání const nebo volatile poskytují ukazatele tyto zvláštní vlastnosti.Použití těchto specifikátory v declarator (na rozdíl ve specifikátoru typu) upravuje vlastnosti ukazatel není objekt na:

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

Další informace naleznete v const a těkavé ukazatele.

Ukazatel na členem třídy nebo struct je deklarována pomocí specifikátoru odpovídající název vnořeného:

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

Orámování volitelné konstantní výraz za název v hranatých závorkách způsobit objekt do pole.Po sobě jdoucí závorkách deklarovat další dimenze do pole.

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

Pro funkce declarators

Závorky obsahující seznam argumentů se používají za názvem deklarovat funkci.Následující deklaruje funkci návratový typ int a tři argumenty typu int.

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

Informace o argument seznamy, viz Deklarace funkce.

Ukazatele a odkazy na funkce jsou deklarovány pomocí prepending ukazatel nebo operátor odkaz na název funkce, jak je uvedeno níže.Závorky, obvykle nepovinné jsou vyžadována rozlišit ukazatel na funkci z funkce, která vrací ukazatel:

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

Odkazy na funkce členů jsou odlišeny specifikátory vnořené název:

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

Viz také ukazatele na členy.

Funkce a objekty ve stejné deklaraci

Funkce a objekty prohlásit ve stejné deklaraci takto:

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

Syntaxe, může být za určitých okolností zavádějící.Následující prohlášení:

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

může vypadat jako prohlášení int ukazatele a funkce vrácení int*, ale není.Důvodem je * je součástí declarator pro i, není součástí declarator pro f.

Zjednodušení syntaxe declarator s typedef

Lepší technika je však použít typedef nebo kombinace závorky a typedef klíčové slovo.Zvažte deklaraci pole ukazatelů funkcí:

//  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];

Odpovídající prohlášení lze zapsat bez typedef prohlášení, ale je tak komplikované, že potenciální chyby přesahuje všechny výhody:

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

Další informace o typedef viz typedef specifikátor.

Ukazatele odkazů na pole jednoho základního typu lze kombinovat v jednom prohlášení (oddělené čárkami) jako

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

Složitější syntaxe declarator

  • Ukazatel, referenční, pole a funkce declarators může kombinovat určit takové objekty jako pole funkcí ukazatele, ukazatele, matice atd.

  • Následující rekurzivní gramatiky plně popisuje syntaxi declarator ukazatel.

  • A declarator je definovaný jako:

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

5. pointer-operator declarator 
6. ( declarator )
  • a ukazatel operátor je jedním z:
* [cv-qualifiers]
& [cv-qualifiers]
:: nested-name-specifier * [cv-qualfiers]

Protože declarator může obsahovat declarators, je možné sestavit složitější odvozené typy jako matice ukazatele, funkce vracející pole ukazatelů funkcí pomocí výše uvedených pravidel.Chcete-li formulář každý krok konstrukce začínají identifikátor představující základní datový typ a použít pravidlo syntaxe nad předchozí výraz jako declarator.Pořadí použití syntaxe pravidla by měla být naopak způsob, jakým je výraz uvedený v angličtině.Pokud použití ukazatel operátor pravidlo syntaxi výrazu pole nebo funkce pomocí závorek, pokud chcete ukazatele na matici nebo funkce jako v posledním řádku v tabulce níže.

Následující příklad ukazuje konstrukce "ukazatel na pole 10 ukazatele na int".

Ústní výraz

Declarator

Syntaxe pro pravidlo

i

1

k Pointer(s)

*i

5

pole 10

(*i)[10]

4

ukazatele

*((*i)[10])

6 a 5

Při více ukazatel odkazovat, pole nebo funkce se používají modifikátory, declarators se může stát poměrně složitá.Téma Interpretace další složité Declarators popisuje, jak číst složitější syntaxe declarator.Téma je použitelná pro c a C++, i když v jazyce C++ kdekoli * označuje ukazatel kvalifikovaný název, například MyClass:: * mohou být použity k určení ukazatele na člen třídy.

Viz také

Referenční dokumentace

Declarators