Share via


Upozornění kompilátoru (úroveň 4) C4460

Operátor WinRT nebo CLR "operator" má parametr předaný odkazem. Operátor WinRT nebo CLR má odlišnou sémantiku od operátoru jazyka C++, chtěli jste předat hodnotu?

Hodnotu jste předali odkazem na uživatelem definovaný operátor prostředí Windows Runtime nebo CLR. Pokud je hodnota uvnitř funkce změněna, mějte na paměti, že hodnota vrácená po volání funkce bude přiřazena návratová hodnota funkce. Ve standardním jazyce C++ se změněná hodnota projeví po volání funkce.

Příklad

Následující ukázka vygeneruje C4460 a ukazuje, jak ji opravit.

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