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