【问题标题】:Are classes namespaces in C++?C++ 中的类命名空间是什么?
【发布时间】:2020-10-28 08:31:35
【问题描述】:

C++ 中的类是命名空间吗?我问这个是因为以下代码是有效的。有人能解释一下原因吗?

代码:

#include <iostream>

class MainClass{
public:
  enum Bool{False, True};

  MainClass(){
    std::cout << "MainClass constructor" << True << std::endl;
  }
  ~MainClass(){
    std::cout << "MainClass destructor" << std::endl;
  }
};

int main(){
  MainClass::Bool myvar = MainClass::False << std::endl; //Why is this line valid?
  std::cout << myvar;
  return 0;
}

【问题讨论】:

  • 类和命名空间都是作用域

标签: c++ class enums namespaces


【解决方案1】:

类不是命名空间。但是Bool枚举是在MainClass的作用域中定义的,所以作用域解析运算符::适用。

【讨论】:

  • 所以我不能说using namespace MainClass; 为了避免输入它。每次?
  • 不,你不能。 using 需要命名空间名称。
  • 你可以用using Bool = ::MainClass::Bool;(我觉得……我没试过,因为没必要这么做。)
【解决方案2】:

在 C++ 中,有一个 namespace,也有一个 class,命名空间不是类。您的代码是有效的,因为您可以在类中嵌套枚举、结构、类等。

【讨论】:

    【解决方案3】:

    C++ 中的类是命名空间吗?

    没有类不是命名空间。

    但是类有一个范围,就像命名空间有一个范围一样。

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 2010-12-02
      • 2011-03-23
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多