编译器警告(等级 1)C4383

'instance_dereference_operator':当存在用户定义的'operator'运算符时,取消句柄引用的意义可以更改;请将该运算符编写为有关操作数的显式静态函数

在托管类型中添加取消引用运算符的用户定义实例重写时,可能会替代类型取消引用运算符返回句柄的对象的能力。 请考虑编写静态用户定义取消引用运算符。

有关详细信息,请参阅对象运算符句柄 (^)跟踪引用运算符

此外,实例运算符不能通过引用的元数据为其他语言编译器使用。 有关详细信息,请参阅用户定义的运算符 (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;
}