5

有没有办法检测(例如编译器警告)是否声明了类friend但不访问私有成员,即。当友谊无用?

4

4 回答 4

6

我不知道如何使用编译器警告来检测这一点,但另一种方法是转到您的类定义文件并搜索并替换friend classwith/*friend*/ class并查看它是否仍然可以编译。当然,对于大型项目来说,这可能会变得相当乏味。

于 2010-07-13T13:32:57.217 回答
3

编译器警告不是标准化的,因此这取决于您的特定编译器。但是,如果他们中的任何一个人支持这一点,我会感到非常惊讶。类似的情况是,如果您有一个仅由其他公共成员调用的公共成员函数(这意味着它不必是公共的),并且我再次认为任何编译器都不会检测到这一点。

进行这些测试中的任何一个都意味着编译器编写者的额外工作,我怀疑他们是否会认为它们足够有用以实现。

于 2010-07-13T13:29:15.093 回答
2

从来没听说过。也许有一个重构工具可以做到这一点。您总是可以尝试删除友谊并查看它是否仍然可以编译,但这对于大型项目可能很耗时。

于 2010-07-13T13:29:35.857 回答
0

您可以编译代码以查看它是否可以编译,然后删除所有“朋友”声明(可能使用 sed 以编程方式)并查看它是否仍然可以编译。

于 2010-07-13T15:35:42.677 回答