pax*_*blo 24 c++ string getline
每次我做一个C++代码行的快速片段
std::string s;
cin >> s;
Run Code Online (Sandbox Code Playgroud)
我诅咒自己,因为我忘了它停在空白处,而不是整条线.
然后,在记忆中getline,我总是对这两个品种感到困惑:
std::string s;
getline (std::cin, s);
Run Code Online (Sandbox Code Playgroud)
和:
char cs[256];
std::cin.getline (cs, sizeof (cs));
Run Code Online (Sandbox Code Playgroud)
除了数据类型之外,这两者之间是否存在实际差异?
在我看来,C++方式应该是前者.在什么情况下我会使用后者,因为我可能应该使用真正的字符串而不是空终止字符数组?
而且,由于输入应该是输入流的范围,为什么不是前者的一部分istream呢?
Fré*_*idi 25
全局getline()函数适用于C++ std :: string对象.
在的IStream ::函数getline()方法,用"经典" C字符串(指针工作char).
Mat*_* M. 10
请记住,标准库由3个(主要)部分组成:IOStream,String和STL,以及一些好东西和C-header.
我没有看到任何奇怪的部分松散耦合(虽然我希望事实并非如此).
其他不一致包括:std::string::lengthvs std::string::size,后者已添加用于与STL的接口兼容性,前者已被保留以与旧代码兼容.
这是一个常见的界面设计问题. cin.getline()是一种自然的方式来发出请求,但为了避免使流代码依赖<string>,不能cin.getline(std::string&)提供任何功能.getline(cin, s)一旦字符串进入范围,以后可以添加独立的.char*因为没有什么可以解决这个问题#include- 无论如何都是语言的所有部分.
在某些方面,当语言允许以后的代码向现有类(例如Ruby)添加更多函数时,这是很好的,但是在其他方面,离域化会使得可维护性受到损害.当然,最小的成员函数和许多独立函数的流行论点是:我个人认为不应该使界面不那么直观和富有表现力,而是每个都是他们自己的.