Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Если этот параметр указан, компилятор требует строгого соответствия const-квалификации для указателей, инициализированных с помощью строковых литералов.
Синтаксис
/Zc:strictStrings[-]
Замечания
Если /Zc:strictStrings задано, компилятор применяет стандартную квалификацию C++ const для строковых литералов в виде типа "массив" или "массивconst charconst wchar_t" в зависимости от объявления. Строковые литералы являются неизменяемыми, и при попытке изменения содержимого одного из них возникает ошибка нарушения доступа во время выполнения. Необходимо объявить указатель на строку как указатель const, чтобы инициализировать его с помощью строкового литерала, или использовать явное приведение const_cast для инициализации указателя, не являющегося указателем const. По умолчанию компилятор /Zc:strictStrings- не применяет стандартную квалификацию C++ const для указателей строк, инициализируемых с помощью строковых литералов.
Параметр /Zc:strictStrings отключен по умолчанию. Параметр /permissive- компилятора неявно задает этот параметр, но его можно переопределить с помощью /Zc:strictStrings-.
/Zc:strictStrings Используйте параметр, чтобы предотвратить компиляцию неправильного кода. В этом примере демонстрируется, как простая ошибка объявления приводит к сбою во время выполнения.
// 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.
// 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. О попытке изменить содержимое указателя const компилятор сообщает как об ошибке.
Примечание.
Стандартная библиотека C++ в Visual Studio 2013 не поддерживает параметр компилятора /Zc:strictStrings в отладочных сборках. Если в выходных данных сборки отображается несколько ошибок C2665 , это может быть причиной.
Дополнительные сведения о вопросах соответствия в Visual C++ см. в статье Nonstandard Behavior.
Установка данного параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Измените свойство "Дополнительные параметры", чтобы включить
/Zc:strictStringsи нажмите кнопку "ОК".