是否有一种方法可以检测(例如,使用编译器警告)是否声明类friend
但是不访问私有成员,即。当友谊无用时?
答案 0 :(得分:6)
我不知道如何使用编译器警告检测到这一点,但另一种方法是转到您的类定义文件并进行搜索&将friend class
替换为/*friend*/ class
并查看它是否仍然可以编译。当然,对于大型项目来说,这可能会变得相当繁琐。
答案 1 :(得分:3)
编译器警告不是标准化的,因此这取决于您的特定编译器。但是,如果他们中的任何人支持这一点,我会感到非常惊讶。类似的情况是,如果你有一个公共成员函数,只有其他公共成员调用(意味着它不需要公开),再一次我不认为任何编译器检测到这一点。
执行这些测试中的任何一个都意味着编译器编写者需要额外的工作,我怀疑他们是否会认为它们对实现来说非常有用。
答案 2 :(得分:2)
不是我知道的。也许那里有一个可以做到的重构工具。您可以随时尝试删除友谊并查看它是否仍然可以编译,但这对于大型项目来说可能非常耗时。
答案 3 :(得分:0)
您可以编译代码以查看它编译,然后删除所有“朋友”声明(可能以编程方式使用sed)并查看它是否仍然编译。