Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'type_1'den 'type_2' dönüştürme için daraltma dönüştürmesi gerekir
Açıklamalar
Tekdüzen başlatma kullanılırken örtük bir daraltma dönüştürmesi bulundu.
C dili, atamalarda ve başlatmada örtük daraltma dönüştürmelerine olanak tanır ve beklenmeyen daraltma birçok kod hatasının nedeni olsa da C++ da buna uyar. Kodu daha güvenli hale getirmek için C++ standardı, bir başlatma listesinde bir daraltma dönüştürmesi gerçekleştiğinde bir tanılama iletisi gerektirir. Visual C++'da, Visual Studio 2015'den başlayarak desteklenen tekdüzen başlatma söz dizimi kullanılırken tanılama Derleyici Hatası C2397'dir. Derleyici, Visual Studio 2013 tarafından desteklenen liste veya toplu başlatma söz dizimini kullanırken Derleyici Uyarısı (düzey 1) C4838 oluşturur.
Dönüştürülen değerlerin olası aralığının hedefe sığabileceğini bildiğinizde daraltma dönüştürmesi sorun olmayabilir. Bu durumda, derleyiciden daha fazlasını biliyorsunuz. Kasıtlı olarak bir daraltma dönüştürmesi yaparsanız, statik bir atama kullanarak amaçlarınızı açık hale getirin. Aksi takdirde, bu hata iletisi neredeyse her zaman kodunuzda bir hata olduğunu gösterir. Başlatdığınız nesnelerin girişleri işlemek için yeterince büyük türler içerdiğinden emin olarak düzeltebilirsiniz.
Example
Aşağıdaki örnek C2397 oluşturur:
// C2397.cpp
// compile with: /c
struct S {
int m1;
double m2, m3;
};
void func(double d1) {
char c1 { 127 }; // OK
char c2 { 513 }; // C2397
S arr[2]{};
arr[0] = { d1, 2.0, 3.0 }; // C2397
arr[1] = { static_cast<int>(d1), 2.0, 3.0 }; // OK
}