Aracılığıyla paylaş


Derleyici Uyarısı (düzey 4) C4460

WinRT veya CLR işleci 'operator', başvuru tarafından geçirilen parametreye sahip. WinRT veya CLR işleci 'işleci', 'işleç' C++ işlecinden farklı semantiklere sahip, değere göre geçirmeyi amaçladınız mı?

Kullanıcı tanımlı bir Windows Çalışma Zamanı veya CLR işlecine başvurarak bir değer geçirdiniz. Değer işlevin içinde değiştirilirse, işlev çağrısından sonra döndürülen değere işlevin dönüş değerinin atanacağını unutmayın. Standart C++ dilinde, değiştirilen değer işlev çağrısından sonra yansıtılır.

Örnek

Aşağıdaki örnek C4460 oluşturur ve nasıl düzeltileceğini gösterir.

// C4460.cpp
// compile with: /W4 /clr
#include <stdio.h>

public value struct V {
   static V operator ++(V& me) {   // C4460
   // try the following line instead
   // static V operator ++(V me) {

      printf_s(__FUNCSIG__ " called\n");
      V tmp = me;
      me.m_i++;
      return tmp;
   }
   int m_i;
};

int main() {
   V v;
   v.m_i = 0;

   printf_s("%d\n", v.m_i);   // Should print 0
   v++;   // Translates to "v = V::operator ++(v)"
   printf_s("%d\n", v.m_i);   // will print 0, hence the warning
}