Una semplice domanda sul tipo di coercizione in C ++
Domanda
Dato un prototipo di funzione, e una definizione di tipo:
int my_function(unsigned short x);
typedef unsigned short blatherskite;
è la seguente situazione definito dalla norma:
int main(int argc, char** argv) {
int result;
blatherskite b;
b=3;
result = my_function(b);
}
Devo ottenere il tipo di coercizione prevedibilmente tramite il prototipo di funzione?
Soluzione
Se la tua domanda è davvero di se i tipi di argomento e il match dei parametri, allora la risposta è sì. typedef
non introduce un nuovo tipo, si crea solo alias per uno esistente. b
variabile ha tipo unsigned int
, proprio come il parametro, anche se b
è dichiarato usando typedef-name blatherskite
.
Il tuo esempio non è molto buona per dimostrare che anche se. Tutti i tipi integrali sono convertibili all'altra in C ++, quindi (ignorando problemi di range) il codice avrebbe definito comportamento anche se blatherskite
designato un tipo diverso (un nuovo tipo). Ma non è così. Quindi questo è anche perfettamente valido
void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
Altri suggerimenti
Non è necessaria alcuna tipo di coercizione. Il typedef è solo un alias per lo stesso tipo, in modo che stai passando un unsigned short
ad una funzione che prende un unsigned short
.