"already a friend"警告何时有用?

When is "already a friend" warning useful?

本文关键字:有用 何时 friend already 警告      更新时间:2023-10-16

我有一段代码,它使用了一个大量预处理器的框架来生成一些实用程序类。显然,有些宏导致同一个friend声明在一个类中被包含两次,就像这样:

class Friendly {
  // :::
  friend class Bestie;
  friend class Bestie;
  // :::
};

当使用gcc(4.8.1)构建时,它会生成一个类似

的警告

Bestie已经是Friendly的友端[默认启用]

我看不出这个警告有什么用。我很好奇为什么它首先包含在gcc中。然而,由于SO社区很难回答这个问题,我将这样陈述我的问题:重复friend声明可能会产生什么问题,或者这种情况可能表明程序员有什么错误?

我能想到的唯一的问题,这可能暗示是"你可能已经打算写别的东西在这里,而不是同样的东西,所以我将帮助警告你这一点。"然而,在这种情况下,预期的友谊将会丢失,这将导致在执行友谊的代码中出现"访问控制违规"错误,因此我认为警告本身没有什么用处。

有没有我忽略的潜在问题?

我认为多次声明你的friend类是没有用的。我认为这是一个被报告的错误,我认为他们已经提供了一个工作来解决。最好是立即向你的类声明一个friend,这样可以避免以后的重复。同时检查

我认为这个警告只是告诉用户,他已经写了很多次多余的代码,这是没有用的。否则我认为这个警告没有任何用处。这就是为什么大多数程序员将其报告为bug。