/Zc:strictStrings (Отключить преобразование типов строковых литералов)/Zc:strictStrings (Disable string literal type conversion)

Если этот параметр указан, const для указателей, инициализированных с помощью строковых литералов, компилятору требуется обеспечить соответствие требованиям.When specified, the compiler requires strict const-qualification conformance for pointers initialized by using string literals.

СинтаксисSyntax

/Zc:strictStrings[-]/Zc:strictStrings[-]

КомментарииRemarks

Если /Zc:strictStrings задано значение, компилятор применяет стандартную const квалификацию C++ для строковых литералов в качестве типа "массив" const char или "массив" в const wchar_t зависимости от объявления.If /Zc:strictStrings is specified, the compiler enforces the standard C++ const qualifications for string literals, as type 'array of const char' or 'array of const wchar_t', depending on the declaration. Строковые литералы являются неизменяемыми, и при попытке изменения содержимого одного из них возникает ошибка нарушения доступа во время выполнения.String literals are immutable, and an attempt to modify the contents of one results in an access violation error at run time. Необходимо объявить указатель строки как const для его инициализации с помощью строкового литерала или явно использовать const_cast для инициализации без const указателя.You must declare a string pointer as const to initialize it by using a string literal, or use an explicit const_cast to initialize a non-const pointer. По умолчанию или если /Zc:strictStrings- указан параметр, компилятор не применяет стандартные стандарты C++ const для указателей на строки, инициализированных с помощью строковых литералов.By default, or if /Zc:strictStrings- is specified, the compiler does not enforce the standard C++ const qualifications for string pointers initialized by using string literals.

По /Zc:strictStrings умолчанию параметр отключен.The /Zc:strictStrings option is off by default. /permissive-Параметр компилятора неявно задает этот параметр, но его можно переопределить с помощью /Zc:strictStrings- .The /permissive- compiler option implicitly sets this option, but it can be overridden by using /Zc:strictStrings-.

Используйте /Zc:strictStrings параметр, чтобы предотвратить компиляцию неверного кода.Use the /Zc:strictStrings option to prevent compilation of incorrect code. В этом примере демонстрируется, как простая ошибка объявления приводит к сбою во время выполнения.This example shows how a simple declaration error leads to a crash at run time:

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

Если /Zc:strictStrings включен, то тот же код сообщает об ошибке в объявлении str .When /Zc:strictStrings is enabled, the same code reports an error in the declaration of 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';
}

Если используется auto для объявления указателя строки, компилятор создает правильное const объявление типа указателя.If you use auto to declare a string pointer, the compiler creates the correct const pointer type declaration for you. При попытке изменить содержимое const указателя компилятором сообщается об ошибке.An attempt to modify the contents of a const pointer is reported by the compiler as an error.

Примечание

Стандартная библиотека C++ в Visual Studio 2013 не поддерживает /Zc:strictStrings параметр компилятора в отладочных сборках.The C++ Standard Library in Visual Studio 2013 does not support the /Zc:strictStrings compiler option in debug builds. Если в выходных данных сборки отображается несколько ошибок C2665 , это может быть причиной.If you see several C2665 errors in your build output, this may be the cause.

Дополнительные сведения о вопросах соответствия в Visual C++ см. в статье Nonstandard Behavior.For more information about conformance issues in Visual C++, see Nonstandard Behavior.

Установка данного параметра компилятора в среде разработки Visual StudioTo set this compiler option in the Visual Studio development environment

  1. Откройте диалоговое окно Страницы свойств проекта.Open the project's Property Pages dialog box. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Выберите страницу свойств Свойства конфигурации > C/C++ > Командная строка .Select the Configuration Properties > C/C++ > Command Line property page.

  3. Измените свойство Дополнительные параметры , чтобы включить его /Zc:strictStrings , а затем нажмите кнопку ОК.Modify the Additional Options property to include /Zc:strictStrings and then choose OK.

См. также разделSee also

/Zc Соответствия/Zc (Conformance)