编译器警告(等级 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;
}