【问题标题】:Unused friend class in C++C ++中未使用的朋友类
【发布时间】:2010-07-13 13:26:57
【问题描述】:

如果类被声明为friend 但不访问私有成员,是否有办法检测(例如编译器警告),即。友情什么时候没用?

【问题讨论】:

  • 也许您可以使用 Clang 库将程序组合在一起?

标签: c++ inheritance friend


【解决方案1】:

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

【讨论】:

  • 这会导致语义上相当复杂的变化。在这里的评论中很难解释,但基本上名称查找不同。
  • @MSalters:你有一个链接可以让我阅读吗?我很想知道语义的变化是什么。
【解决方案2】:

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

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

【讨论】:

  • 我不太了解您的公共成员示例,但除此之外我同意您的回答。
  • @Helltone:我猜他的意思是如果一个公共成员函数只能通过同一个类的其他函数访问,它根本不需要是公共的。
【解决方案3】:

我不知道。也许有一个重构工具可以做到这一点。您可以随时尝试删除友谊,看看它是否仍然可以编译,但这对于大型项目来说可能很耗时。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 以下宏是将“朋友”(以及该行代码的其余部分)转换为注释的简单方法。如果朋友声明是多行的,这将不起作用。 #define 朋友 //
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多