Derleyici Uyarısı (düzey 4) C4840
variadic işlevine bağımsız değişken olarak 'type' sınıfının taşınabilir olmayan kullanımı
Açıklamalar
Variadic işlevine geçirilen sınıflar veya yapılar önemsiz olarak kopyalanabilir olmalıdır. Bu tür nesneleri geçirirken, derleyici yalnızca bit düzeyinde bir kopya yapar ve oluşturucuyu veya yıkıcıyı çağırmaz.
Bu uyarı Visual Studio 2017'den itibaren kullanılabilir.
Örnek
Aşağıdaki örnek C4840 oluşturur ve nasıl düzeltileceğini gösterir:
// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>
int main()
{
struct S {
S(int i) : i(i) {}
S(const S& other) : i(other.i) {}
operator int() { return i; }
private:
int i;
} s(0);
printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
// as an argument to a variadic function
// To correct the error, you can perform a static cast
// to convert the object before passing it:
printf("%i\n", static_cast<int>(s));
}
kullanılarak CStringW
oluşturulan ve yönetilen dizeler için, sağlanan operator LPCWSTR()
bir nesneyi biçim dizesi tarafından beklenen C stili dize işaretçisine göndermek CStringW
için kullanılmalıdır:
CStringW str1;
CStringW str2;
// ...
str1.Format("%s", static_cast<LPCWSTR>(str2));