我有一些代码,它使用预处理程序繁重的框架来生成一些实用程序类。显然,某些宏导致在类中包含两次相同的friend
声明,如下所示:
class Friendly {
// :::
friend class Bestie;
friend class Bestie;
// :::
};
使用gcc(4.8.1)构建时,会生成类似
的警告
Bestie
已经是Friendly
的朋友[默认启用]
我无法真正看到此警告中的用法。我很好奇为什么它首先包含在gcc中。但是,由于SO社区几乎无法回答这个问题,我将在此陈述我的问题:重复friend
声明可能会出现什么问题,或者程序员错误可能出现的情况如何?
我能想到的唯一一个可能暗示的问题是“你可能打算在这里写下别的东西而不是同样的东西,所以我会有所帮助警告你。”但是,在这种情况下,预期的友谊将会丢失,这将导致执行友谊的代码中出现“访问控制违规”错误,因此我看不到警告本身的用处。
我有什么潜在的问题吗?
答案 0 :(得分:1)
我不认为多次申报你的朋友班是有用的。我认为报道的是bug,我认为他们提供了 work around 。最好立刻向你的班级宣布一个朋友,并且应该稍后进行复制。另请检查this
我认为警告只是告知用户他多次编写冗余代码是没用的。否则,我不认为有任何使用此警告。这就是大多数程序员将其报告为错误的原因。