2012-09-20 31 views
2

在下面的C++程序中,我包含了string.h文件,并且成功实例化了C++字符串类并调用其成员函数之一:size()。为什么通过string.h工作访问C++字符串类?

#include <iostream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    string s = "Hello"; 
    cout << "String: " << s << endl; 
    cout << "Size of string: " << s.size() << endl; 
    cin.get(); 
    return 0;  
} 

输出是:

String: Hello 
Size of string: 5 

我使用的开发-C++ 4.9.9.2

我的问题:不将文件string.h文件只是提供的功能操纵C字符串?它不包括C++字符串类的定义权利?那么,我怎样才能在不使用#include <string>的情况下访问C++字符串类?我的理解是string.h文件是C字符串库文件,<string>包含C++字符串库文件。这是不对的?

谢谢!

回答

7

这是因为std::string是通过包含在<iostream>标头中的一个文件定义的。这些流提供了对字符串输入和输出的支持,因此它们需要包含一个字符串标题,以便定义相应的>><<操作。

+0

啊,我明白了。顺便说一下,对应于''的文件是什么?我的意思是,相应文件的名称和扩展名是什么? – GigaRohan

+0

@GigaRohan这是与系统相关的:在我的系统(OS X w/gcc编译器)中,从''包含的文件是'bits/stringfwd.h'。它通过一系列'istream' - >'ios' - >'iosfwd'间接包含在内。 – dasblinkenlight

+0

该标准并不要求它是一个文件,但在我的Mac上它只是'/ usr/include/C++/4.2.1/string'。没有扩展。 –

相关问题