ref (atributo)
El atributo [ref] identifica un puntero de referencia. Se usa simplemente para representar un nivel de direccionamiento indirecto.
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]]
, ...);
Parámetros
-
type-attribute-list
-
Especifica uno o varios atributos que se aplican al tipo. Los atributos de tipo válidos incluyen [handle], [switch_type], [transmit_as]; los atributos de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle], [string] y [ignore]. Separe varios atributos con comas.
-
type-specifier
-
Especifica un tipo base, una estructura, una unióno un identificador de tipo de enumeración. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.
-
declarador estándar
-
Especifica un declarador de C estándar, como un identificador, un declarador de puntero o un declarador de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers.
-
declarator-list
-
Especifica declaradores de C estándar, como identificadores, declaradores de puntero y declaradores de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers. La lista de declaradores consta de uno o varios declaradores separados por comas. El identificador parameter-name del declarador de función es opcional.
-
field-attribute-list
-
Especifica cero o más atributos de campo que se aplican a la estructura, al miembro de unión o al parámetro de función. Los atributos de campo válidos incluyen [first_is], [last_is], [length_is], [max_is], [size_is]; los atributos de uso [string], [ignore]y [context_handle]; el atributo de puntero [ref], [unique]o [ptr]; y el atributo de unión [switch_type]. Separe varios atributos de campo con comas.
-
function-attribute-list
-
Especifica cero o más atributos que se aplican a la función. Los atributos de función válidos son [devolución de llamada], [local]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [string], [ignore]y [context_handle].
-
ptr-decl
-
Especifica al menos un declarador de puntero al que se aplica el atributo [ref ]. Un declarador de puntero es el mismo que el declarador de puntero usado en C; se construye a partir del designador *, modificadores como far y el calificador const.
-
nombre de función
-
Especifica el nombre del procedimiento remoto.
-
parameter-attribute-list
-
Consta de cero o más atributos adecuados para el tipo de parámetro especificado. Los atributos de parámetro pueden tomar los atributos direccionales [in] y [out]; los atributos de campo [first_is], [last_is], [length_is], [max_is], [size_is]y [switch_type]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle] y [string]. El atributo de uso [ignore] no se puede usar como atributo de parámetro. Separe varios atributos con comas.
Observaciones
Un atributo de puntero se puede aplicar como atributo de tipo, como atributo de campo que se aplica a un miembro de estructura, miembro de unión o parámetro; o como atributo de función que se aplica al tipo de valor devuelto de la función. El atributo de puntero también puede aparecer con la palabra clave [pointer_default].
Un puntero de referencia tiene las siguientes características:
- Siempre apunta al almacenamiento válido; nunca tiene el valor NULL. Siempre se puede desreferenciar un puntero de referencia.
- Nunca cambia durante una llamada. Un puntero de referencia siempre apunta al mismo almacenamiento en el cliente antes y después de la llamada.
- No asigna memoria nueva en el cliente. Los datos devueltos desde el servidor se escriben en el almacenamiento existente especificado por el valor del puntero de referencia antes de la llamada.
- No provoca el alias. No se puede acceder al almacenamiento al que apunta un puntero de referencia desde ningún otro nombre de la función.
Un puntero de referencia no se puede usar como el tipo de puntero devuelto por una función.
Si no se especifica ningún atributo para un parámetro de puntero de nivel superior, se trata como puntero de referencia.
Ejemplos
[unique] char * GetFirstName(
[in, ref] char * pszFullName);
Vea también