为什么自动添加库?
Why libraries automatically added?
我在Visual Studio 2019中创建了一个项目。(> Windows 桌面向导>控制台应用程序创建一个项目,并取消选中所有选项。
截图
像这样的代码正在工作,但我没有在代码中添加 math.h 库。我不明白为什么 sqrt 函数可以正常工作。
#include <iostream>
int main()
{
std::cout << sqrt(9);
}
假设您有以下文件:
a.h
b.h
main.cpp
主要你有:
#include <a.h>
int main() {
// Use func from a.h
aFunc();
// Use func from b.h
bFunc();
}
就像你的情况一样,假设这没有问题。那么程序如何知道bFunc
是什么呢?
可能的答案是a.h
看起来像这样:
#include <b.h>
aFunc();
这意味着当你包括a.h
时,你也包括了来自内部b.h
。
现在,如果您专门使用b.h
函数,那么在main中包含b.h
被认为是很好的做法。如果设置了包含保护,那么应该没有问题,并且更容易阅读代码。
如果其他一些#include
包含缺少的标头,则可能会发生这种情况,但您不应依赖此标头。例如,此代码不能在 gcc 或 clang 中编译。
但即使它现在编译,如果不在同一编译器的未来版本中包含缺少的标头,它可能无法编译。我最近实际上遇到了这个问题,我在文件中使用std::runtime_error
而没有包括<stdexcept>
.它工作了多年,然后当 Arch 将 gcc 更新到版本 10 时,它停止编译,我不得不添加缺少的包含。
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 为什么如果我添加这一行,我的程序会不断询问值
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 如果我在下面的代码片段中添加"delete[] d;",为什么我得到零?
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 为什么"std::add_pointer"会添加之前删除的"const"?
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 为什么我的双变量通过添加 c++ 显示 nan?
- 为什么添加延迟会提高此多线程环境中的数据吞吐量?
- 为什么 QXmlQuery 似乎在结果中添加了一个""?(以及如何解决它?
- 为什么自动添加库?
- 为什么 MSVC _count_of实现将 0 添加到 sizeof 的结果中?
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- 为什么添加 MPI 时文件打不开?
- 为什么在函数参数前面添加 const 会出错?