首页 > 解决方案 > 何时包含程序中的标题?

问题描述

当诸如“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 课程编程作业中获得分数,因为即使程序有效,老师说在使用字符串数据类型时我需要包含字符串库。即使从技术上讲,没有它也可以。这就是问题所在。

标签: c++syntax

解决方案


你的老师是对的。

您的程序在没有<string> 机会的情况下运行。您在那个平台上的那个版本的标准库实现,在那种情况下,在那一天,通过<iostream>. 标准库只是代码,就像你的一样,碰巧你的特定实现在里面包含<iostream>一个#include <string>. 它可能被埋在许多其他#includes 后面,但最终到达那里。但这确实是纯粹的机会,并不意味着这是语言所保证的,或者即使在实践中也必须始终如此。

您应该始终按照标准进行编码。

如果您使用来自 的功能<string>,请包括<string>.

就在今天,我试图用一个新的工具链构建我的大项目,并发现了一些我不小心依赖传递包含的地方,结果它破坏了构建,因为新的标准库实现的标题排列略有不同. 我尽职尽责地添加了缺失#include的 s,现在世界对它来说是一个更好的地方。


推荐阅读