tipos relativas relativa referencias referencia mixtas mixta entre ejercicios ejemplos diferencia absoluta c++ syntax reference

c++ - mixtas - referencias relativas ejemplos



C++ Pasa por sintaxis de referencia const (3)

Sé que el tema de pasar por referencia y pasar por puntero está muy cubierto ... Estoy bastante seguro de entender todos los matices hasta que leo esto:

http://carlo17.home.xs4all.nl/cpp/const.qualifier.html

que dice (en caso de que el enlace se acabe)

The prototype for foobar can have any of the following footprints: void foobar(TYPE); // Pass by value void foobar(TYPE&); // Pass by reference void foobar(TYPE const&); // Pass by const reference Note that I put the const to the right of TYPE because we don''t know if TYPE (this is not a template parameter, but rather for instance a literal char*) is a pointer or not!

¿Qué quiere decir el autor con "Tenga en cuenta que puse el const a la derecha de TYPE porque no sabemos si TYPE ... es un puntero o no!"

Todo lo que he leído sobre este tema ha sido consistente al decir que:

void foodbar (TYPE const &)

es equivalente también

void foobar (const TYPE &)

Si entiendo al autor correctamente, él / ella está diciendo que:

const int * X vs int * const X donde puntero, X en sí es const contra lo que X apunta es const?

Si es así, ¿es esto cierto?


En cuanto a C ++ FAQ Lite (como lo sugiere el artículo), lee las declaraciones de puntero de derecha a izquierda. Entonces, si TYPE es un puntero, la ubicación de * hace una diferencia. Sigue el enlace para la historia completa.


Si TYPE es un #define para algo como int* , la ubicación de const sí importa. En ese caso, obtendrá const int* o int* const dependiendo de la ubicación de const .

Si TYPE es un typedef o un parámetro de plantilla, la const afectará a todo el tipo en ambos sentidos.

Para mí, esto se parece más a otro argumento en contra de las macros, más que a la necesidad de un estilo específico en las declaraciones.


void foobar(TYPE const&); // Pass by const reference

Si TYPE es un puntero a un tipo ABC, entonces

void foobar(ABC* const&)

es diferente a

void foobar(const ABC* &)

Creo que eso es todo lo que el autor está logrando.

EDITAR

Esto también se aplica si typedef es un puntero

typedef SomeStruct* pSomeStruct; void foobar(pSomeStruct* const &); // const reference to a pointer // to a pointer to SomeStruct void foobar(const pSomeStruct* &); // reference to a pointer // to a const pointer to const SomeStruct