C++ 11 命名空间范围与函数 [duplicate]

C++11 namespace scoping with functions [duplicate]

提问人:codingtuba 提问时间:10/16/2022 更新时间:10/16/2022 访问量:78

问:

现在,我正在用 c++ 编写一个复杂的项目。我简化了这个示例,在命名空间中,我定义了两个函数,它们都需要彼此。

namespace Example {
   void foo()
   {
      bar();
   }

   void bar()
   {
      foo();
   }
}

有什么方法可以解决我的问题,而无需将函数与命名空间分开?

C++ 函数 C++11 作用域 命名空间

评论


答:

2赞 user17732522 10/16/2022 #1

您可以在命名空间内进行正向声明,就像在全局命名空间范围内执行此操作一样:

namespace Example {
   void bar();

   void foo()
   {
      bar();
   }

   void bar()
   {
      foo();
   }
}

但是,对于任何函数,如果这些是在多个翻译单元之间共享的头文件中定义的函数,则需要标记它们。如果它们是在一个翻译单元中仅以一种含义声明和定义的函数,那么它们可能应该被标记,以便其他具有相同名称的函数可以在其他翻译单元中声明,而不会发生名称冲突和随之而来的 ODR 违规和 UB。inline.cppstatic

此外,您可以根据需要随时打开和关闭命名空间,并根据需要打开和关闭任意数量的文件和翻译单元。F.D.公司

namespace Example {
    void foo();
    void bar();
}

在头文件中和

#include<header.h>

namespace Example {
    void foo()
    {
       bar();
    }

    void bar()
    {
       foo();
    }
}

在相应的也没问题。.cpp