Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando especificado, o compilador exige conformidade rígida com qualificação de const para ponteiros inicializados com literais da cadeia de caracteres.
Sintaxe
/Zc:strictStrings[-]
Comentários
Se /Zc:strictStrings for especificado, o compilador forçará as qualificações const do C++ padrão nos literais de cadeia de caracteres, como o tipo "matriz de const char" ou "matriz de const wchar_t", dependendo da declaração. Os literais da cadeia de caracteres são imutáveis, e uma tentativa de modificar o conteúdo de um resulta em um erro de violação de acesso em tempo de execução. Você deve declarar um ponteiro da cadeia de caracteres como const para inicializá-lo usando um literal da cadeia de caracteres ou usar um const_cast explícito para inicializar um ponteiro não const. Por padrão, ou se /Zc:strictStrings- for especificado, o compilador não vai impor as qualificações de const do C++ padrão em ponteiros da cadeia de caracteres inicializados com literais da cadeia de caracteres.
A opção /Zc:strictStrings é desativada por padrão. A opção do compilador /permissive- define implicitamente essa opção, mas ela pode ser substituída usando /Zc:strictStrings-.
Use a opção /Zc:strictStrings para evitar a compilação de código incorreto. Este exemplo mostra como um erro de declaração simples leva a uma falha em tempo de execução:
// 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 está habilitado, o mesmo código relata um erro na declaração 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';
}
Se você usar auto para declarar um ponteiro da cadeia de caracteres, o compilador criará a declaração do tipo de ponteiro const correta para você. Uma tentativa de modificar o conteúdo de um ponteiro const é relatada pelo compilador como um erro.
Observação
A Biblioteca Padrão do C++ no Visual Studio 2013 não oferece suporte à opção do compilador /Zc:strictStrings em compilações de depuração. Se você vir diversos erros C2665 na saída da compilação, essa poderá ser a causa.
Para obter mais informações sobre problemas de conformidade no Visual C++, confira Comportamento fora do padrão.
Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.
Modifique a propriedade Opções Adicionais para incluir
/Zc:strictStringse selecione OK.