提问人:mochimochi 提问时间:8/7/2020 最后编辑:Geno Cmochimochi 更新时间:8/7/2020 访问量:264
如果我不包含 <string.h>,为什么我的程序编译成功?
Why does my program compile successfully if I don't include <string.h>?
问:
我对此感到困惑已有一段时间了。为了测试这一点,我制作了一个简单的程序,它只创建一个 std::string 变量并将其打印到屏幕上。但是,它不包括 <string.h>。
#include <iostream>
using namespace std;
int main()
{
string name = "Test";
cout << name << endl;
return 0;
}
让我感到困惑的是,这个程序编译和运行完美。现在,我正在使用 XCode 开发人员工具附带的编译器。这是预期的行为吗?我希望这个问题不会太荒谬,因为我刚刚开始学习C++。clang
答:
1赞
Geno C
8/7/2020
#1
您不需要包含头文件的原因是,当您包含头文件时,它包括 .#include <string.h>
#include <iostream>
std::string
但是,不要依赖它。在编译器上可能有效的方法可能在另一个编译器上不起作用。始终包含正确的头文件。
要编辑您的示例,您应该如何使用它:
#include <iostream>
#include <string>
int main()
{
std::string name = "Test";
std::cout << name << std::endl;
return 0;
}
另请注意:为什么您不应该使用 using namespace std;
。
-1赞
eerorika
8/7/2020
#2
如果我不包含,为什么我的程序编译成功?
<string.h>
因为您没有使用任何定义/声明。<string.h>
程序编译并完美运行......这是预期的行为吗?
这是偶然行为。
不能保证一个标准标头不会包含其他标准标头。碰巧包含在这个特定版本的标准库中。由于无法保证这一点,因此依赖这种传递性包含是错误的。<iostream>
<string>
评论
<iostream>
包括<string>
<string>
<string.h>
<iostream>
<string>