我对C++编程很陌生。我试图获取用户输入,并将它们放入变量中,然后使用cin。它适用于整数和其他的,但strings除外。所以,当我四处搜索时,我发现我必须包括<string>头。我只想了解,包含字符串头发生了哪些更改?我认为cin是由字符串头中定义的函数重载的。因此,我开始查看string头,无法找到重载的cin或在其中定义的任何函数。有谁能告诉我cin是如何在包含<string>之后开始接受字符串输入的吗?
发布于 2018-06-13 18:07:51
template <class CharT, class Traits, class Allocator>
std::basic_ostream<CharT, Traits>&
operator<<(std::basic_ostream<CharT, Traits>& os,
const std::basic_string<CharT, Traits, Allocator>& str);
template <class CharT, class Traits, class Allocator>
std::basic_istream<CharT, Traits>&
operator>>(std::basic_istream<CharT, Traits>& is,
std::basic_string<CharT, Traits, Allocator>& str);这些免费的标准库函数允许您将std::string与来自basic_ostream或basic_istream的任何流一起使用。
发布于 2018-06-13 18:08:09
<string>头主要定义标准库的std::string类。没有它,C++中就没有字符串类:它不是语言的组成部分。当然,您可以使用char*-strings,C风格,但这不是我们通常在C++中所做的事情。
除了std::string,标头还为std::string和流定义了>>和<<运算符,这样您就可以执行std::cout << my_string和std::cin >> another_string这样的操作,这种语法相当于operator<<(std::cout, my_string)和operator>>(std::cin, another_string)。
重要注意: C语言的<string.h>头与C++的<string>完全不同。C语言头和C语言一样是可用的,定义了 (null-terminated) strings。不要混淆这两个标题,也不要混淆这两种“字符串”。
https://stackoverflow.com/questions/50843514
复制相似问题