Maison >développement back-end >C++ >Pourquoi la conversion d'un littéral de chaîne en « char* » est-elle invalide en C mais valide en C ?
Pourquoi la conversion de chaîne littérale en 'char*' n'est pas valide en C mais valide en C
Le système de types plus strict de C applique le utilisation d'un pointeur const char pour référencer des littéraux de chaîne, empêchant les modifications qui pourraient conduire à un comportement indéfini. Ceci est absent en C, où la conversion d'une chaîne littérale en 'char' est implicitement autorisée.
Pour résoudre cette incohérence, C 11 a supprimé la conversion implicite obsolète, rendant le code :
char* p = "abc";
invalide. Cependant, un cast explicite maintient la compatibilité :
char* p = (char*)"abc";
Le cast ne contourne pas le comportement sous-jacent. Il permet la conversion, mais n'empêche pas les conséquences indéfinies de la modification du littéral.
En C, la validité de cette conversion est maintenue pour des raisons de compatibilité avec le code existant. Une grande partie du code existant repose sur cette conversion implicite, ce qui rend difficile pour les comités de normalisation de rompre cette fonctionnalité sans avertissement préalable.
Par conséquent, alors que C interdit la conversion implicite pour garantir la sécurité des types, C l'autorise en raison de la prévalence de dépendance à la base de code. Cependant, il est fortement conseillé d'utiliser char const* pour les chaînes littérales dans les deux langues afin d'éviter des problèmes potentiels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!