如果我不包含 <string.h>,为什么我的程序编译成功?
Why does my program compile successfully if I don't include <string.h>?
我为此困惑了一段时间。为了测试这一点,我制作了一个简单的程序,它只创建一个 std::string 变量并将其打印到屏幕上。但是,它不包括 。
#include <iostream>
using namespace std;
int main()
{
string name = "Test";
cout << name << endl;
return 0;
}
令我困惑的是这个程序编译和运行完美。现在,我正在使用 XCode 开发人员工具附带的 clang
编译器。这是有意的行为吗?我刚开始学C++,希望这个问题不要太可笑
您不需要包含 #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;
。
Why does my program compile successfully if I don't include <string.h>
?
因为您没有使用 <string.h>
中的任何定义/声明。
program compiles and runs perfectly ... Is this intended behavior?
这是偶然的行为。
不能保证一个标准 header 不会包含其他标准 header。碰巧 <iostream>
在这个特定版本的标准库中包含了 <string>
。由于无法保证这一点,因此依赖这种传递包含是错误的。
我为此困惑了一段时间。为了测试这一点,我制作了一个简单的程序,它只创建一个 std::string 变量并将其打印到屏幕上。但是,它不包括
#include <iostream>
using namespace std;
int main()
{
string name = "Test";
cout << name << endl;
return 0;
}
令我困惑的是这个程序编译和运行完美。现在,我正在使用 XCode 开发人员工具附带的 clang
编译器。这是有意的行为吗?我刚开始学C++,希望这个问题不要太可笑
您不需要包含 #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;
。
Why does my program compile successfully if I don't include
<string.h>
?
因为您没有使用 <string.h>
中的任何定义/声明。
program compiles and runs perfectly ... Is this intended behavior?
这是偶然的行为。
不能保证一个标准 header 不会包含其他标准 header。碰巧 <iostream>
在这个特定版本的标准库中包含了 <string>
。由于无法保证这一点,因此依赖这种传递包含是错误的。