在specyfing命名空间后通过指针内联声明对象

时间:2015-09-24 05:53:30

标签: c++ pointers object namespaces

当我输入时:

Cat *cat = new Cat(); 

并输入“using namespace Namespace;”在顶部,它的工作原理。 但是,如果我试试这个:

Namespace :: Cat *cat = new Cat();

它不起作用。所以,如果有人能够解释它,我会很感激。

1 个答案:

答案 0 :(得分:1)

简短回答

如果您不写using namespace Namespace,则需要在名称Cat每次出现时指定名称空间。

Namespace::Cat *cat = new Namespace::Cat();

解释

当您编写没有命名空间规范的Cat时,编译器会在当前范围和命名空间中搜索Cat,在这种情况下,Cat位于不同的命名空间中,因此除非找不到它你告诉编译器通过添加using namespace Namespace;来查看该命名空间。

您拥有的另一个选项是始终通过在类型Namespace::Cat的每次出现之前写入命名空间来限定其名称。这样编译器就知道要查找的位置。

第二种方法通常被认为更好,因为名称冲突的可能性较小。

有关编译器如何搜索名称的详细信息,请参阅Name Lookup