【发布时间】:2010-07-13 13:26:57
【问题描述】:
如果类被声明为friend 但不访问私有成员,是否有办法检测(例如编译器警告),即。友情什么时候没用?
【问题讨论】:
-
也许您可以使用 Clang 库将程序组合在一起?
标签: c++ inheritance friend
如果类被声明为friend 但不访问私有成员,是否有办法检测(例如编译器警告),即。友情什么时候没用?
【问题讨论】:
标签: c++ inheritance friend
我不知道如何使用编译器警告来检测这一点,但另一种方法是转到您的类定义文件并使用/*friend*/ class 搜索并替换friend class 并查看它是否仍然编译.当然,对于大型项目,这可能会变得相当乏味。
【讨论】:
编译器警告没有标准化,因此这取决于您的特定编译器。但是,如果他们中的任何一个人支持这一点,我会感到非常惊讶。类似的情况是,如果您有一个仅由其他公共成员调用的公共成员函数(这意味着它不必是公共的),我再次认为任何编译器都不会检测到这一点。
执行这些测试中的任何一个都意味着编译器编写者的额外工作,我怀疑他们是否会认为它们足够有用以实现。
【讨论】:
我不知道。也许有一个重构工具可以做到这一点。您可以随时尝试删除友谊,看看它是否仍然可以编译,但这对于大型项目来说可能很耗时。
【讨论】:
您可以编译代码以查看它是否可以编译,然后删除所有“朋友”声明(可能使用 sed 以编程方式)并查看它是否仍然可以编译。
【讨论】: