Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
N’utilisez pas de casts C de style de fonction.
Instructions principales C++ : ES.49 : Si vous devez utiliser un cast, utilisez un cast nommé
Les casts de style de fonction (par exemple) int(1.1)sont une autre forme de casts de style C (comme (int)1.1), qui ont une sécurité douteuse. Plus précisément, le compilateur n’essaie pas de vérifier si une perte de données peut se produire dans des casts C ou dans des casts de fonction. Dans les deux cas, il est préférable d’éviter le cast ou d’utiliser un initialiseur accoladé si possible. Si aucun des deux fonctionne, les casts statiques peuvent convenir, mais il est toujours préférable d’utiliser les utilitaires de la bibliothèque de prise en charge des instructions :
-
gsl::narrowgarantit la conversion sans perte et lève sigsl::narrowing_errorce n’est pas possible. -
gsl::narrow_castindique clairement que la conversion peut perdre des données et qu’elle est acceptable.
Notes
Cette règle se déclenche uniquement pour les constantes des types primitifs. Le compilateur peut détecter clairement la perte de données dans ces cas et émettre une erreur si un initialiseur accoladé est utilisé. Les cas qui nécessitent une exécution au moment de l’exécution sont marqués par la NO_CSTYLE_CAST C26493.
Les initialiseurs par défaut ne sont pas marqués (par exemple
int()).
Exemple
Exemple de conversion dangereux :
constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475
Erreur du compilateur pour la conversion dangereuse, détection de la perte de données potentielle :
constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397
Pour corriger la conversion dangereuse, utilisez un type primitif de taille appropriée :
constexpr auto planck_constant = double{ 6.62607004082e-34 };