Поделиться через


Предупреждение компилятора (уровень 1) C4383

"instance_dereference_operator": значение деreferencing дескриптор может измениться, когда существует определяемый пользователем оператор "оператор"; запись оператора в виде статической функции, чтобы быть явным в операнде

При добавлении определяемого пользователем экземпляра переопределение оператора деreference в управляемом типе вы можете переопределить возможность оператора разыменования типа возвращать объект дескриптора. Рассмотрите возможность написания статического, определяемого пользователем оператора деreference.

Дополнительные сведения см. в разделе "Дескриптор оператора объектов" (^) и "Оператор ссылки на отслеживание".

Кроме того, оператор экземпляра недоступен другим компиляторам языка через метаданные, на которые ссылается ссылка. Дополнительные сведения см. в разделе "Определяемые пользователем операторы " (C++/CLI)".

Пример

В следующем примере возникает ошибка C4383.

// C4383.cpp
// compile with: /clr /W1

ref struct S {
   int operator*() { return 0; }   // C4383
};

ref struct T {
   static int operator*(T%) { return 0; }
};

int main() {
   S s;
   S^ pS = %s;

   T t;
   T^ pT = %t;
   T% rT = *pT;
}