每次我写一小段C++代码时
std::string s;
cin >> s;
我自责,因为我忘记了它在空格处停止而不是获取整行。
然后,想起getline时,我总会对两种变体感到困惑:
std::string s;
getline (std::cin, s);
并且:
char cs[256];
std::cin.getline (cs, sizeof (cs));
这两者除了数据类型之外,实际上有区别吗?在我看来,C++ 的方式应该是前者。在什么情况下我会使用后者,考虑到我可能应该使用真正的字符串而不是以空字符结尾的字符数组呢?
而且,由于输入应该是输入流的职责,那么为什么前者不是
istream
的一部分呢?
s.getline(std::cin)
而是破坏了我可爱的object.method()
世界观呢? - paxdiablogetline()
是一个流操作,而不是字符串操作,因此将其作为std::string
类的方法似乎有些奇怪。 - Frédéric Hamidis.getline(std::cin)
呢?因为让std::string
的实现依赖于std::istream
比反过来更糟糕。"打破我可爱的对象.方法()世界观",请查阅"泄漏抽象"和"多重分派"。这种软件视角从一开始就是错误的。 - Jim Balter