Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 4) C4460

Operator "operator" winRT lub CLR ma parametr przekazany przez odwołanie. Operator WinRT lub CLR ma różne semantyki od operatora "operator" języka C++, czy zamierzasz przekazać wartość?

Uwagi

Przekazano wartość przez odwołanie do zdefiniowanego przez użytkownika środowisko wykonawcze systemu Windows lub operatora CLR. Jeśli wartość zostanie zmieniona wewnątrz funkcji, należy pamiętać, że wartość zwrócona po wywołaniu funkcji zostanie przypisana zwracana wartość funkcji. W standardowym języku C++zmieniona wartość jest odzwierciedlana po wywołaniu funkcji.

Przykład

Poniższy przykład generuje kod C4460 i pokazuje, jak go naprawić.

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