ref (attributo)
L'attributo [ref] identifica un puntatore di riferimento. Viene usato semplicemente per rappresentare un livello di riferimento indiretto.
pointer_default(ref)
typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
...}
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
Parametri
-
type-attribute-list
-
Specifica uno o più attributi che si applicano al tipo. Gli attributi di tipo validi includono [handle], [switch_type], [transmit_as]; gli attributi del puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle], [string]e [ignore]. Separare più attributi con virgole.
-
type-specifier
-
Specifica un tipo di base, uno struct, un'unione o un tipo di enumerazione o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.
-
dichiaratore standard
-
Specifica un dichiaratore C standard, ad esempio un identificatore, un dichiaratore di puntatore o un dichiaratore di matrice. Per altre informazioni, vedere Array e Sized-Pointer Attributi, matrici e matricie puntatori.
-
declarator-list
-
Specifica i dichiaratori C standard, ad esempio identificatori, dichiaratori di puntatore e dichiaratori di matrice. Per altre informazioni, vedere Array e Sized-Pointer Attributi, matrici e matricie puntatori. L'elenco dichiaratore è costituito da uno o più dichiaratori separati da virgole. L'identificatore del nome parametro nel dichiaratore di funzione è facoltativo.
-
field-attribute-list
-
Specifica zero o più attributi di campo che si applicano alla struttura, al membro dell'unione o al parametro della funzione. Gli attributi di campo validi includono [first_is], [last_is], [length_is], [max_is], [size_is]; gli attributi di utilizzo [string], [ignore], e [context_handle]; l'attributo puntatore [ref], [unique]o [ptr]; e l'attributo union [switch_type]. Separare più attributi di campo con virgole.
-
function-attribute-list
-
Specifica zero o più attributi che si applicano alla funzione. Gli attributi di funzione validi sono [callback], [local]; l'attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string], [ignore], e [context_handle].
-
ptr-decl
-
Specifica almeno un dichiaratore di puntatore a cui si applica l'attributo [ref]. Un dichiaratore di puntatore è lo stesso del dichiaratore del puntatore usato in C; viene costruito da * designator, modificatori come per lontano e qualificatore const.
-
function-name
-
Specifica il nome della routine remota.
-
parameter-attribute-list
-
È costituito da zero o più attributi appropriati per il tipo di parametro specificato. Gli attributi dei parametri possono accettare gli attributi direzionali [in] e [out]; gli attributi del campo [first_is], [last_is], [length_is], [max_is], [size_is], e [switch_type]; l'attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle] e [string]. L'attributo di utilizzo [ignore] non può essere usato come attributo di parametro. Separare più attributi con virgole.
Commenti
Un attributo puntatore può essere applicato come attributo di tipo, come attributo di campo che si applica a un membro della struttura, a un membro dell'unione o a un parametro; o come attributo di funzione che si applica al tipo restituito della funzione. L'attributo puntatore può essere visualizzato anche con la parola chiave [pointer_default].
Un puntatore di riferimento presenta le caratteristiche seguenti:
- Punta sempre allo spazio di archiviazione valido; non ha mai il valore NULL. Un puntatore di riferimento può sempre essere dereferenziato.
- Non cambia mai durante una chiamata. Un puntatore di riferimento punta sempre alla stessa risorsa di archiviazione nel client prima e dopo la chiamata.
- Non alloca nuova memoria nel client. I dati restituiti dal server vengono scritti nella risorsa di archiviazione esistente specificata dal valore del puntatore di riferimento prima della chiamata.
- Non causa l'aliasing. Non è possibile raggiungere l'archiviazione a cui punta un puntatore di riferimento da qualsiasi altro nome nella funzione.
Un puntatore di riferimento non può essere usato come tipo di puntatore restituito da una funzione.
Se non viene specificato alcun attributo per un parametro puntatore di primo livello, viene considerato come puntatore di riferimento.
Esempi
[unique] char * GetFirstName(
[in, ref] char * pszFullName);
Vedere anche