Condividi tramite


/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

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.

  3. Modificare la proprietà Opzioni aggiuntive per includere /Zc:strictStrings e quindi scegliere OK.

Vedi anche

/Zc (Conformità)