/Zc:strictStrings (Désactiver la conversion du type de littéral de chaîne)
Quand il est spécifié, le compilateur requiert une conformité de qualification const stricte pour les pointeurs initialisés à l'aide de littéraux de chaîne.
/Zc:strictStrings[-]
Notes
Si /Zc:strictStrings est spécifié, le compilateur applique les qualifications const C++ standard pour les littéraux de chaîne, en tant que type 'tableau de const char' ou 'tableau de const wchar_t', en fonction de la déclaration. Les littéraux de chaîne sont immuables et une tentative de modification du contenu d'un de ces littéraux entraîne une erreur de violation d'accès au moment de l'exécution. Vous devez déclarer un pointeur de chaîne en tant que const pour l'initialiser en utilisant un littéral de chaîne ou utilisez un const_cast explicite pour initialiser un pointeur non const. Par défaut, ou si /Zc:strictStrings- est spécifié, le compilateur n'applique pas les qualifications const C++ standard pour les pointeurs de chaîne initialisés à l'aide de littéraux de chaîne.
Utilisez l'option /Zc:strictStrings pour empêcher la compilation de code incorrect. Cet exemple montre comment une simple erreur de déclaration conduit à un incident au moment de l'exécution :
// strictStrings_off.cpp
// compile by using: cl /W4 strictStrings_off.cpp
int main() {
wchar_t* str = L"hello";
str[2] = L'a'; // run-time error: access violation
}
Quand /Zc:strictStrings est activé, le même code signale une erreur dans la déclaration de str.
// strictStrings_on.cpp
// compile by using: cl /Zc:strictStrings /W4 strictStrings_on.cpp
int main() {
wchar_t* str = L"hello"; // error: Conversion from string literal
// loses const qualifier
str[2] = L'a';
}
Si vous utilisez auto pour déclarer un pointeur de chaîne, le compilateur crée automatiquement la déclaration de type de pointeur const correcte. Une tentative de modification du contenu d'un pointeur const est signalée par le compilateur en tant qu'erreur.
Notes
La bibliothèque C++ standard dans Visual C++ dans Visual Studio 2013 ne prend pas en charge l'option de compilateur /Zc:strictStrings dans les versions Debug.Si vous voyez plusieurs erreurs C2665 dans votre sortie de build, elles sont peut-être dues à cela.
Pour plus d'informations sur les problèmes de conformité dans Visual C++, consultez Comportement non standard.
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d'informations, voir Utilisation des propriétés de projet.
Sélectionnez le dossier C/C++.
Sélectionnez la page de propriétés Ligne de commande.
Modifiez la propriété Options supplémentaires pour inclure /Zc:strictStrings, puis choisissez OK.