gpt4 book ai didi

c++ - 在 C++ 中通过实例对象调用静态方法的警告

转载 作者:可可西里 更新时间:2023-11-01 17:54:28 27 4
gpt4 key购买 nike

我知道通过实例对象调用静态方法是explicitly allowed .

但是如果我想手动避开,调用发生时如何警告我呢?我的意思是,是否有一些编译器选项(或一些特殊属性)来检查情况?

我正在使用 Clang,但也欢迎使用任何其他编译器特定功能。

最佳答案

答案是否定的。根据其他问答,标准要求并允许这种行为。参见 n3797 s9.4/2:

A static member s of class X may be referred to using the qualified-id expression X::s; it is not necessary to use the class member access syntax (5.2.5) to refer to a static member. A static member may be referred to using the class member access syntax, in which case the object expression is evaluated.

鉴于这种生硬的语言,任何编译器将如何执行您的要求?

也许您应该寻找一个 lint 版本。我找到了 http://stellar.cleanscape.net/products/cpp/checks.html和错误 1705,这可能是您想要的,我相信还有其他错误。


所以问题是为什么是 lint,而不是编译器。这里有灰色阴影,但我认为编译器警告通常是为已经或可能是或实际上可能是错误的事情保留的。它们可能是未定义的行为,或已定义的实现,或编译器执行与预期不同的操作的地方。通过指针调用静态方法不属于该类别。这绝对是标准的要求,并且会生成您所期望的代码。

编译器不是用来执行编码标准的,还有其他工具可以做到这一点。在 C/C++ Unix 世界中,历史上是 lint 使您能够检测和提示违反编码标准的行为,而不是编译器。在 .Net 世界中,它一直是 FxCop,尽管现在 Visual Studio 做的大部分事情都是一样的。当您希望您的代码满足特定标准时,您会寻找一种进行静态代码分析的工具,例如此列表 here .

如果这不能回答您的问题,也许您可​​能想问另一个问题。就目前而言,我相信编译器通过实现标准而不发出警告来做正确的事情。

关于c++ - 在 C++ 中通过实例对象调用静态方法的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23756459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com