c++ - c++中存储的非标准函数的声明在哪里?

标签 c++ c++11 visual-c++ c++14

据我所知,函数的原型(prototype)在各自的头文件中。标准函数的声明在标准库中,这就是我们使用术语“使用命名空间标准”的原因。但是非标准函数的声明存储在哪里?

最佳答案

标准库不必作为头文件实现。

C++ 标准说明了当你 #include <vector> 时会发生什么.它不需要 vector是您系统上的头文件;它可以作为引入某些符号和类型的编译器内在函数来实现。

它规定了当您与这些符号和类型交互时会发生什么。

作为头文件通常很容易做到这一点;但是 std 中有一些 C++ 特性无法在 C++ 中实现。通常,“表面”交互是在 C++ 中完成的,但随后它们又求助于神奇的编译器内在函数。

大部分std可以存在并且确实作为纯头文件存在。它的其他部分通常被编译成库,通常主要是用 C 或 C++ 编写的。它们与操作系统库交互,这些库也大多用 C(有时是 C++ 和其他语言)编写,而这些库又与用 C 和汇编语言混合编写的硬件特定代码对话。

“运行时”库可以动态或静态链接到您的输出,并充当 C++ 要求和特定操作系统提供的内容之间的一种“粘合剂”。


可以存在其他库。它们的头文件以编译器确定的方式存储,并以编译器确定的方式搜索。动态或静态地链接它们的库也是以编译器确定的方式完成的,就像存在所述库的地方一样。

它们可以用多种语言编写,只要它们导出与编译器期望的 ABI 相匹配的接口(interface)即可。

关于c++ - c++中存储的非标准函数的声明在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40722068/

相关文章:

c++ - 是否缺少必需的包含未定义行为?

c++ - 以在编译时和运行时都可用的方式在 C++ 中描述像素格式信息

c++ - 通过 for 循环从 C++ 映射中删除元素

visual-c++ - 包含 gl.h 时的 VC++ 编译错误

c++ - C++ 中的定宽整数

c++ - Visual Studio 2013 - 自动插入 "->"运算符

c++ - 使用 NULL 值初始化指向类的指针

c++ - 为什么汉字经过编译器会变成乱码?

c++ - 在C++中,当模板参数没有出现在下面的类或函数声明中时,它有什么用?

c++ - 字符串文字的C++比较