Una simple pregunta sobre el tipo de coacción en C ++
Pregunta
Dado un prototipo de función, y una definición de tipo:
int my_function(unsigned short x);
typedef unsigned short blatherskite;
es la siguiente situación definida por la norma:
int main(int argc, char** argv) {
int result;
blatherskite b;
b=3;
result = my_function(b);
}
¿Debo obtener el tipo de coacción predecible a través del prototipo de la función?
Solución
Si su pregunta es realmente acerca de si los tipos de argumento y el partido parámetro, entonces la respuesta es sí. typedef
no introduce un nuevo tipo, que sólo crea alias para una ya existente. b
variable tiene el tipo unsigned int
, al igual que el parámetro, a pesar de que b
se declara usando typedef-nombre blatherskite
.
Su ejemplo no es muy bueno para demostrar que sin embargo. Todos los tipos integrales son convertibles entre sí en C ++, por lo que (ignorando los problemas de rango) el código habría definido el comportamiento incluso si blatherskite
designa un tipo diferente (un nuevo tipo). Pero no lo hace. Así que esto también es perfectamente válido
void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
Otros consejos
No se necesita ningún tipo de coacción. El typedef es sólo un alias para el mismo tipo, por lo que está pasando una unsigned short
a una función que toma un unsigned short
.