为什么cin在包含String头之后接受字符串输入

时间:2018-06-13 18:00:25

标签: c++ string iostream cin

我是C ++编程的新手。我试图接受用户输入并将它们放在变量中,我正在使用cin。除了strings之外,它适用于整数和其他的整数。所以,当我搜索时,我发现我必须包含<string>标题。我只想了解,包含字符串标题会发生什么变化?我认为cin被字符串标头中定义的函数重载。所以,我开始研究字符串标题,我找不到cin重载或根本没有定义任何函数。任何人都可以告诉我在cin包含<string>之后x <- matrix(1:10, nrow = 5, ncol = 2) x [,1] [,2] [1,] 1 6 [2,] 2 7 [3,] 3 8 [4,] 4 9 [5,] 5 10 如何开始接受字符串输入?

2 个答案:

答案 0 :(得分:5)

<string> defines the functions

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_ostreambasic_istream的任何流一起使用。

答案 1 :(得分:1)

<string>标题主要定义标准库的std::string类。没有它,你在C ++中没有字符串类:它不是语言的组成部分。当然你可以使用char* - 字符串,C风格,但这不是我们通常在C ++中做事的方式。

std::string一起,该标头还为>>和流定义<<std::string运算符,以便您可以执行{std::cout << my_string之类的操作1}}和std::cin >> another_string。该语法等同于operator<<(std::cout, my_string)operator>>(std::cin, another_string)

重要说明:C语言的<string.h>标题与C ++的<string>完全不同。 C语言标头可以像在C中一样使用,并定义certain functions working on char* (null-terminated) strings。不要混淆两个标题,也不要混淆两种&#34;字符串&#34;。