【问题标题】:Is A::B::B::B::B...B::f() right ? Why could i do that? [duplicate]A::B::B::B::B...B::f() 对吗?为什么我能那样做? [复制]
【发布时间】:2020-12-18 13:44:41
【问题描述】:

我不知道该怎么解释:

namespace A
{
struct B
{
  static void  f()
  {
  }
};
}

int  main()
{
  A::B::B::B::B::B::B::B::B::B::B::f();
}

为什么我可以这样做:

A::B::B::B::B::B::B::B::B::B::B::f();

我不明白为什么会这样。

【问题讨论】:

  • 可能需要language-lawyer 标签。看起来你找到了一个 C++ 复活节彩蛋。
  • 很难找到这样的骗子,我只能找到它,因为我记得它与蝙蝠侠有关:)
  • 这很有趣。 godbolt.org/z/hPfaoj
  • @largest_prime_is_463035818,我更喜欢这种形式的问题;)

标签: c++ namespaces language-lawyer


【解决方案1】:

这是由于injected-class-name

在 B 类内部,B 指代 B 类,如 B::B

所以A::B::B 指的是类B。等等。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2017-04-06
    • 2019-10-27
    • 2022-11-10
    • 2014-03-29
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多