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