OVH Cloud OVH Cloud

invalid static_cast

1 réponse
Avatar
Christophe de Vienne
Bonjour,

La conversion suivante est invalide (d'après gcc, et je lui fait confiance
sur ce coup là), mais je ne comprend pas pourquoi :

1 int main()
2 {
3 const unsigned char tab[] = "test";
4 const char * s = static_cast<const char *>(tab);
5 }

g++ test.cpp -o test
test.cpp: In function `int main()':
test.cpp:4: erreur: static_cast invalide du type « const unsigned char[5] »
au type « const char* »
make: *** [test] Erreur 1


Seul le reinterpret_cast passe. Non que cela m'embête, mais j'aimerais
comprendre...


Merci !

Christophe

1 réponse

Avatar
Jean-Marc Bourguet
Christophe de Vienne writes:

3 const unsigned char tab[] = "test";
4 const char * s = static_cast<const char *>(tab);
test.cpp:4: erreur: static_cast invalide du type « const unsigned char[5] »
au type « const char* »

Seul le reinterpret_cast passe. Non que cela m'embête, mais j'aimerais
comprendre...


static_cast sur des pointeurs fonctionne
- de et vers void*
- entre pointeurs vers des classes ayant un rapport de derivation

En particulier ce n'est pas parce que tu peux faire un static_cast
entre deux types que tu peux faire un static_cast entre pointeurs vers
ces types (en general, un static_cast peut s'accompagner d'un
changement de representation, donc ca semble normal).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org