c++ - C++ 中的头文件和命名空间

标签 c++

我在处理头文件和 namespace 时遇到问题。如果我们在命名空间中定义函数,那么我们可以使用该命名空间的名称作为标识符。

这没问题,但真正令人困惑的是,C++ 中的大多数函数(在不同的 头文件中声明)都在std 命名空间中。

现在是头文件里面的命名空间还是头文件里面的命名空间?

如果命名空间位于每个头文件中,那么如何使一个函数(在头文件中声明并完全实现)成为该预定义命名空间的成员?

一个具体的例子:

当我尝试使用 string 时在 C++ 中然后我使用 #include <string>但后来我必须使用标识符来调用函数(如 std ::stoi )。

现在,当我打开头文件时 string我看到了stoi在头文件中完全实现 string .那么这个函数如何成为std的成员呢?命名空间因为在 string我没有看到头文件 std任何地方也不是 std 的成员显式命名空间。

我的问题可能非常基础,但我在任何地方都找不到答案。简单地在命名空间中声明一个函数然后使用它很简单,但是一个在头文件中声明和实现的函数,该函数如何成为任何命名空间的成员以及一个命名空间如何具有来自不同头文件的函数?

如果有人告诉我怎么做就够了stoi成为 std 的成员.剩下的我可以自己做。

最佳答案

可以添加命名空间。例如,在一个文件中你可能有:

  namespace myspace {
      int f();
  }

还有一个:

  namespace myspace {
      void g();
  }

现在 fg 都是命名空间 myspace 中的函数。如果您愿意,您还可以在上面的代码中提供函数的定义。或者在一个实现文件中你可以这样做:

  namespace myspace {
      int f() {
           return 42;
      }
  }

关于c++ - C++ 中的头文件和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55928912/

相关文章:

c++ - 在不知道缓冲区大小的情况下从套接字读取

c++ - 导出内联声明的类函数

c++ - 函数从字符串转换为 int 时出现运行时错误

c++ - 子类中具有不同值的静态基类属性

c++ - 自定义交换样板

c++ - C++ 中的 Tic-Tac-Toe 帮助,如何制作循环以便 Tic Tac Toe 游戏每次都会重复棋盘

c++ - 获取函数的 decltype

c++ - 为什么我的图书馆管理程序没有写入文件

c++ - 编译器错误 : "does not name a type" in macro when compiling with g++

具有过期时间的 C++ 容器