/Zc:strictStrings
(Disabilitare la conversione dei tipi letterali stringa)
Quando specificato, il compilatore richiede la stretta conformità con la qualificazione const
per i puntatori inizializzati mediante valori letterali di stringa.
Sintassi
/Zc:strictStrings
[-
]
Osservazioni:
Se /Zc:strictStrings
viene specificato, il compilatore applica le qualifiche C++ const
standard per i valori letterali stringa, come tipo 'matrice di const char
' o 'matrice di const wchar_t
', a seconda della dichiarazione. I valori letterali di stringa non sono modificabili e un tentativo di modificare il contenuto di uno di questi valori provoca un errore di violazione di accesso in fase di esecuzione. È necessario dichiarare un puntatore di stringa come const
per inizializzarlo mediante un valore letterale di stringa o usare un oggetto const_cast
per inizializzare un puntatore non const
. Per impostazione predefinita, o se /Zc:strictStrings-
viene specificato, il compilatore non applica le qualifiche C++ const
standard per i puntatori stringa inizializzati usando valori letterali stringa.
L'opzione /Zc:strictStrings
è disattivata per impostazione predefinita. L'opzione /permissive-
del compilatore imposta in modo implicito questa opzione, ma può essere sottoposta a override tramite /Zc:strictStrings-
.
Usare l'opzione /Zc:strictStrings
per impedire la compilazione di codice non corretto. Questo esempio mostra in che modo un semplice errore di dichiarazione provoca un arresto anomalo in fase di esecuzione:
// 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
}
Quando /Zc:strictStrings
è abilitato, lo stesso codice segnala un errore nella dichiarazione di 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';
}
Se si usa auto
per dichiarare un puntatore di stringa, il compilatore crea automaticamente la dichiarazione del tipo di puntatore const
corretta. Il tentativo di modificare il contenuto di un puntatore const
viene segnalato dal compilatore come errore.
Nota
La libreria standard C++ in Visual Studio 2013 non supporta l'opzione del /Zc:strictStrings
compilatore nelle compilazioni di debug. Se vengono visualizzati diversi errori C2665 nell'output di compilazione, questa potrebbe essere la causa.
Per altre informazioni sui problemi di conformità in Visual C++, vedere Nonstandard Behavior.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.
Modificare la proprietà Opzioni aggiuntive per includere
/Zc:strictStrings
e quindi scegliere OK.