Bagikan melalui


Compiler Warning (level 4) C4460

Operator WinRT atau CLR 'operator', memiliki parameter yang diteruskan oleh referensi. Operator WinRT atau CLR 'operator' memiliki semantik yang berbeda dari operator C++ 'operator', apakah Anda ingin melewati nilai?

Anda meneruskan nilai berdasarkan referensi ke operator Windows Runtime atau CLR yang ditentukan pengguna. Jika nilai diubah di dalam fungsi, perhatikan bahwa nilai yang dikembalikan setelah panggilan fungsi akan diberi nilai pengembalian fungsi. Di C++standar, nilai yang diubah tercermin setelah panggilan fungsi.

Contoh

Sampel berikut menghasilkan C4460 dan menunjukkan cara memperbaikinya.

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