Sdílet prostřednictvím


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?

Poznámky

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í příklad vygeneruje C4460 a ukazuje, jak ho 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
}