代码之家  ›  专栏  ›  技术社区  ›  jkeys

我们应该教初学者使用全局名称空间吗?

  •  0
  • jkeys  · 技术社区  · 15 年前

    注意:我自己也是一个初学者。这个问题集中在C++的使用上,因为这是我唯一有经验的语言。

    对于使用堆栈溢出,似乎存在共识 using namespace std;

    我只是想知道为什么人们在示例代码中使用前缀std::时会有问题。声明一个全局名称空间似乎变化无常,特别是因为许多提问者将示例中的代码复制并粘贴到他们的IDE中。名称空间是一个高级编程概念,但我认为最好在std::前面加上前缀,然后在初学者询问时解释。

    6 回复  |  直到 11 年前
        1
  •  7
  •   Stack Overflow is garbage    15 年前

    我认为答案是“这并不重要”。这是一个微妙的,相当容易拿起和纠正以后。

    我所知道的每个初学者的编程文本都进行了大量简化,并使用了大量的手工操作来隐藏大量正在发生的事情(“这行代码很神奇,只要输入它,我们将在后面讨论它的作用”)。

    初学者不必完全理解代码中的所有内容,也不必完全理解代码的坏处,所以这些简化往往是好事。

    虽然在这种情况下我有点同意你。

    添加 std:: 前缀不会有什么大不了的,它会让名称空间变得更加神秘。 using namespace std 实际上更难解释和理解。

        2
  •  3
  •   thedz    15 年前

    对于初学者,IMO来说,理解函数、类、条件等概念更为重要。显式名称空间声明只是一个障碍。

        3
  •  2
  •   Thomas Owens    15 年前

    我认为这简化了它。当您是初学者时,您需要学习变量、控制结构、方法/函数等知识,以及C/C++中的指针和引用等知识。在掌握了适用于每种编程语言的基础知识之前,您不必担心名称空间和打包之类的问题。

        4
  •  2
  •   CB Bailey    15 年前

    总是有 全局名称空间,您无法摆脱它,因为其他名称空间都嵌套在它的某个地方,所以您无法真正避免它。

    using namespace std; 好主意与否是一个独立但相关的主题。

    我个人认为初学者永远不应该这样做 使用名称空间std; . 顾名思义,他们是那种不知道所使用的每个标识符的用户 std

    例如,如果正确(或错误!)包含以下“初学者风格”代码,则会生成一个关于 count 模棱两可。专家修复代码不会有问题。初学者可能会被难倒。

    using namespace std;
    int count = 3;
    int main()
    {
        cout << count << endl;
        return 0;
    }
    

    此外,使用 使用名称空间std; 要求您引入单词namespace和名称空间的概念,或将指令捏造为“required magic”或类似的内容。如果没有它,您只需在中说出C++提供的标准字符串类型的名称 <string> std::string . 名称空间概念本身只有在将事物放入单独的名称空间或将事物从一个名称空间注入另一个名称空间时才需要理解。这些都是更高级的主题,可以保存到以后。

        5
  •  0
  •   JP Alioto    15 年前

        6
  •  0
  •   Maciek    15 年前

    然而,在初学者阶段,这不是一件紧迫的事情——他们应该意识到,

    namespace A
    {
    int a;
    }
    
    namespace B
    {
    int a;
    }
    

    A::A和B::A是两个不同的东西