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

Declaring object via pointer inline after specyfing namespace

本文关键字:指针 声明 对象 命名空间      更新时间:2023-10-16

当我输入:

Cat *cat = new Cat(); 

并将"using namespace namespace;"放在顶部,就可以了。但是,如果我这样做:

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

它不工作。如果有人能解释一下,我会很感激的。

简短回答

如果你不写using namespace Namespace,你需要在中指定每一个出现的名称Cat

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

解释

当你写Cat没有命名空间规范编译器搜索Cat在当前范围和命名空间,在这种情况下,Cat是在一个不同的命名空间,所以它不能被发现,除非你告诉编译器通过添加using namespace Namespace;来查看该命名空间。

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

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

关于编译器如何搜索名称的详细信息,请参见名称查找。