宣称主要是朋友认为有害吗?

101*_*010 14 c++ program-entry-point friend language-lawyer c++11

讨论

我知道main可以成为一个朋友class:

#include <iostream>

class foo {
  friend int main();
  int i = 4;
};

int main() {
  foo obj;
  std::cout << obj.i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

LIVE DEMO

但是,我觉得虽然这是完全允许的,但它隐藏了许多危险.

问题

  1. 在制作main班级朋友方面有什么有用的用途吗?
  2. 是否有任何理由宣称main作为班级的朋友应被视为有害?

Ben*_*igt 16

如果该功能实际上不合法,那么选择是使用还是避免合法功能就没有实际意义.我相信对此存在严重怀疑,因为标准说

该功能main不得在程序中使用.

关于朋友::main()是否实际上是允许的,已经有一个问题,你会在我的答案中找到更多细节.


qua*_*dev 8

一般的考虑因素应与其他任何功能相同.


但是,我看到一个可能的危险:

C++标准:

  • 第11.3节(朋友)

首先在朋友声明中声明的函数具有外部链接

  • 第3.6.1节(主要功能)

main的链接是实现定义的

因此,如果您的实现期望main()不具有外部链接并且您首先声明main()为朋友(如您的示例中所示),则与标准相矛盾.