微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在理解 std::cin.peek() 和 std::cin.get()

如何解决我在理解 std::cin.peek() 和 std::cin.get()

我对 std::cin.peek()std::cin.get()用法很困惑,我的意思是这些版本返回 int

正如我在 C++ 入门中所读到的,我们永远不应该将这些函数的返回值分配给 char

char c = std::cin.get(); // erroneous

但在 Cppreference 上,它在示例、许多网站和包括我在内的许多程序员中都这样做了,直到我发现不这样做的逻辑。

https://en.cppreference.com/w/cpp/io/basic_istream/get

我也看到了这样的使用检查换行:

while(std::cin.peek() != '\n' )
    ;// do something

在上面的代码中我认为是可以的,因为实际上没有从 intchar 的赋值,而是一个比较,其中换行符 '\n' 首先被提升到 {{ 1}} 然后与 int 相比,我认为这不是邪恶的。

  • 如果代码没问题,那么使用 int 函数有什么意义?

  • 所以没有办法将从 std::char_traits<char>::to_int_type()peek() 返回的任何值分配给 get()?'

我看过一些推荐的代码,例如:

char
  • 那么 char c; while(std::cin.peek() != std::char_traits<char>::to_int_type('\n')){ std::cin.get(c); std::cout.put(c); } '\n' 的隐式转换和使用这个 trait 函数有什么区别?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。