在对象上调用静态成员函数——有没有办法将其转化为编译器错误

Calling static member function on an object-- is there a way to make that into compiler error?

本文关键字:错误 编译器 对象 调用 静态成员 有没有 函数      更新时间:2023-10-16

当其他方法充当对象的修饰符时,IDE会自动完成静态方法,这很烦人。有没有一种(智能的)方法可以将下面这样的代码变成编译错误?

  // Translate along X and Y axes, rotate pi/4 about axis X;
  QQuaternion q;
  q.fromAxisAndAngle({1,0,0}, 45.0); // whoops, fromAxisAndAngle is static!
  // Later: test fails, "wait why is my quaternion still identity!?" 

也许对被忽略的静态方法的返回值进行了某种检查,并且它是在对象ClassFoo().StaticMethod()上而不是通过ClassFoo::StaticMethod()调用的?

您无法区分代码中的"在对象上调用"情况,因为它只是一个语法设备。不管怎样,调用的结果都是一样的。但给定的编译器可能支持对此进行警告诊断,如果是这样,则可能将该警告诊断转换为编译错误(例如,使用g++、-pedantic-errors,但我不知道g++是否有该调用的警告)。