/Zc:strictStrings
(Zakázání převodu typu řetězcového literálu)
Při zadání vyžaduje kompilátor striktní const
shodu 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_t
v 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
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
Upravte vlastnost Další možnosti tak, aby zahrnovala
/Zc:strictStrings
a potom zvolte OK.