c++ - 何时包含程序中的标题?
问题描述
当诸如“iostream”之类的库已经提供了解决方案时,您是否包含“字符串”标头?
示例:如果您已经包含了 iostream 库,您是否包含字符串库?哪种是正确的专业方法?
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin;
fin.open("input.txt");
string data;
fin >> data;
cout << data << endl; // Works with <iostream>, and without <string>
fin.close();
return 0;
}
示例 2:如果另一个库提供功能,即使程序在没有字符串的情况下编译,也要使用字符串库?
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream fin;
fin.open("input.txt");
string data;
fin >> data;
cout << data << endl; // Even though <iostream> allowed program to compile, we include the <string> library.
fin.close();
return 0;
}
在我的 CSC 101 课程编程作业中获得分数,因为即使程序有效,老师说在使用字符串数据类型时我需要包含字符串库。即使从技术上讲,没有它也可以。这就是问题所在。
解决方案
你的老师是对的。
您的程序在没有<string>
机会的情况下运行。您在那个平台上的那个版本的标准库实现,在那种情况下,在那一天,通过<iostream>
. 标准库只是代码,就像你的一样,碰巧你的特定实现在里面包含<iostream>
一个#include <string>
. 它可能被埋在许多其他#include
s 后面,但最终到达那里。但这确实是纯粹的机会,并不意味着这是语言所保证的,或者即使在实践中也必须始终如此。
您应该始终按照标准进行编码。
如果您使用来自 的功能<string>
,请包括<string>
.
就在今天,我试图用一个新的工具链构建我的大项目,并发现了一些我不小心依赖传递包含的地方,结果它破坏了构建,因为新的标准库实现的标题排列略有不同. 我尽职尽责地添加了缺失#include
的 s,现在世界对它来说是一个更好的地方。
推荐阅读
- html - 具有绝对位置的元素内的大文本不会随其容器增长
- javascript - 为什么 CKEditor 为我的自定义标签添加空项目符号?
- database - Flask 存储和统计视图的数量
- r - R:创建反映字典和df中列之间匹配的类别列
- python - python弹出列表会触发要更新列表的另一个副本?
- scala - Spark Scala - 编译错误
- drupal - Drupal 8:如何根据标签生成分类页面
- maven - 已安装 Maven,但无法识别 mvn -version。当我使用 %M2_HOME%\bin\mvn -version 时工作
- javascript - 当您可以在 .js 文件中设置它时,为什么还要使用 .env 文件?
- arcgis-js-api - 从 hitTest() 返回的几何在用作查询几何时抛出“无效的查询参数”