当我输入时:
Cat *cat = new Cat();
并输入“using namespace Namespace;”在顶部,它的工作原理。 但是,如果我试试这个:
Namespace :: Cat *cat = new Cat();
它不起作用。所以,如果有人能够解释它,我会很感激。
答案 0 :(得分:1)
如果您不写using namespace Namespace
,则需要在名称Cat
的每次出现时指定名称空间。
Namespace::Cat *cat = new Namespace::Cat();
当您编写没有命名空间规范的Cat
时,编译器会在当前范围和命名空间中搜索Cat
,在这种情况下,Cat
位于不同的命名空间中,因此除非找不到它你告诉编译器通过添加using namespace Namespace;
来查看该命名空间。
您拥有的另一个选项是始终通过在类型Namespace::Cat
的每次出现之前写入命名空间来限定其名称。这样编译器就知道要查找的位置。
第二种方法通常被认为更好,因为名称冲突的可能性较小。
有关编译器如何搜索名称的详细信息,请参阅Name Lookup。