"already a friend"警告何时有用?
When is "already a friend" warning useful?
我有一段代码,它使用了一个大量预处理器的框架来生成一些实用程序类。显然,有些宏导致同一个friend
声明在一个类中被包含两次,就像这样:
class Friendly {
// :::
friend class Bestie;
friend class Bestie;
// :::
};
当使用gcc(4.8.1)构建时,它会生成一个类似
的警告
Bestie
已经是Friendly
的友端[默认启用]
我看不出这个警告有什么用。我很好奇为什么它首先包含在gcc中。然而,由于SO社区很难回答这个问题,我将这样陈述我的问题:重复friend
声明可能会产生什么问题,或者这种情况可能表明程序员有什么错误?
我能想到的唯一的问题,这可能暗示是"你可能已经打算写别的东西在这里,而不是同样的东西,所以我将帮助警告你这一点。"然而,在这种情况下,预期的友谊将会丢失,这将导致在执行友谊的代码中出现"访问控制违规"错误,因此我认为警告本身没有什么用处。
有没有我忽略的潜在问题?
我认为多次声明你的friend类是没有用的。我认为这是一个被报告的错误,我认为他们已经提供了一个工作来解决。最好是立即向你的类声明一个friend,这样可以避免以后的重复。同时检查
我认为这个警告只是告诉用户,他已经写了很多次多余的代码,这是没有用的。否则我认为这个警告没有任何用处。这就是为什么大多数程序员将其报告为bug。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 何时提供默认参数作为模板参数
- C++-明确何时以及如何调用析构函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 其中降频广播实际上是有用的
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 如果非动态变量被指针引用,何时超出范围?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 何时定义QT_NO_CONTEXTMENU?
- 何时为派生类初始化 vptr?
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 指针的 C++ 动态数组 - 何时需要使用它?
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 变量的值何时可以在C++中意外更改?
- 调用方如何知道 VARIANT 中何时有十进制?
- 在现代C++中,临时寿命延长何时有用?
- setbuf何时有用(除了NULL值之外)
- 只有编译器的内存屏障(如std::atomic_signal_fence)何时有用
- "already a friend"警告何时有用?