Sdílet prostřednictvím


/Zc:strictStrings (Zakázání převodu typu řetězcového literálu)

Při zadání vyžaduje kompilátor striktní constshodu s kvalifikací pro ukazatele inicializované pomocí řetězcových literálů.

Syntaxe

/Zc:strictStrings[-]

Poznámky

Je-li /Zc:strictStrings zadán, kompilátor vynucuje standardní kvalifikace jazyka C++ const pro řetězcové literály, jako typ "pole const char" nebo "pole" const wchar_tv závislosti na deklaraci. Řetězcové literály jsou neměnné a pokus o úpravu obsahu jednoho výsledku způsobí chybu porušení přístupu za běhu. Je nutné deklarovat ukazatel řetězce tak, aby const byl inicializován pomocí řetězcového literálu, nebo použít explicitní const_cast inicializaci jiného nežconst ukazatele. Ve výchozím nastavení kompilátor /Zc:strictStrings- nevynucuje standardní kvalifikace jazyka C++ const pro ukazatele řetězce inicializované pomocí řetězcových literálů.

Možnost /Zc:strictStrings je ve výchozím nastavení vypnutá. Možnost /permissive- kompilátoru implicitně nastaví tuto možnost, ale lze ji přepsat pomocí ./Zc:strictStrings-

/Zc:strictStrings Tuto možnost použijte, pokud chcete zabránit kompilaci nesprávného kódu. Tento příklad ukazuje, jak jednoduchá chyba deklarace vede k chybovému ukončení za běhu:

// 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
}

Pokud /Zc:strictStrings je povoleno, stejný kód hlásí chybu v deklaraci 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';
}

Pokud použijete auto k deklaraci ukazatele řetězce, kompilátor za vás vytvoří správnou const deklaraci typu ukazatele. Pokus o úpravu obsahu const ukazatele je kompilátorem hlášen jako chyba.

Poznámka:

Standardní knihovna C++ v sadě Visual Studio 2013 nepodporuje možnost kompilátoru /Zc:strictStrings v buildech ladění. Pokud se ve výstupu sestavení zobrazí několik chyb C2665 , může to být příčina.

Další informace o problémech s shodami v jazyce Visual C++ naleznete v tématu Nestandardní chování.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.

  3. Upravte vlastnost Další možnosti tak, aby zahrnovala /Zc:strictStrings a potom zvolte OK.

Viz také

/Zc (Shoda)