Aracılığıyla paylaş


/Zc:strictStrings (Dize değişmez değer türü dönüştürmeyi devre dışı bırak)

Belirtildiğinde, derleyici dize değişmez değerleri kullanılarak başlatılan işaretçiler için katı constniteleme uyumluluğu gerektirir.

Sözdizimi

/Zc:strictStrings[-]

Açıklamalar

Belirtilirse/Zc:strictStrings, derleyici, bildirime bağlı olarak dize değişmez değerleri için 'dizisi' veya 'dizisiconst charconst wchar_t' türü olarak standart C++ const nitelemelerini zorlar. Dize değişmez değerleri sabittir ve bir dizenin içeriğini değiştirme girişimi, çalışma zamanında erişim ihlali hatasıyla sonuçlanır. Dize sabit değeri kullanarak başlatmak için olarak const bir dize işaretçisi bildirmeniz veya işaretçi olmayanconst bir başlatmak için bir açık const_cast kullanmanız gerekir. Varsayılan olarak veya belirtilirse /Zc:strictStrings- , derleyici dize değişmez değerleri kullanılarak başlatılan dize işaretçileri için standart C++ const nitelemelerini zorlamaz.

Seçenek /Zc:strictStrings varsayılan olarak kapalıdır. Derleyici /permissive- seçeneği bu seçeneği örtük olarak ayarlar, ancak kullanılarak /Zc:strictStrings-geçersiz kılınabilir.

Yanlış kodun /Zc:strictStrings derlenmesini önlemek için seçeneğini kullanın. Bu örnekte basit bir bildirim hatasının çalışma zamanında kilitlenmeye nasıl yol açtığı gösterilmektedir:

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

Etkinleştirildiğinde /Zc:strictStrings , aynı kod bildiriminde strbir hata bildirir.

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

Dize işaretçisi bildirmek için kullanırsanız auto , derleyici sizin için doğru const işaretçi türü bildirimini oluşturur. bir işaretçinin const içeriğini değiştirme girişimi, derleyici tarafından hata olarak bildirilir.

Dekont

Visual Studio 2013'teki C++ Standart Kitaplığı, hata ayıklama derlemelerinde derleyici seçeneğini desteklemez /Zc:strictStrings . Derleme çıkışınızda birkaç C2665 hatası görürseniz, bunun nedeni bu olabilir.

Visual C++'daki uyumluluk sorunları hakkında daha fazla bilgi için bkz . Standart Dışı Davranış.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Ek Seçenekler özelliğini içerecek /Zc:strictStrings şekilde değiştirin ve tamam'ı seçin.

Ayrıca bkz.

/Zc (Uyumluluk)