c++ - 如何复制cin

标签 c++ cin

<分区>

我试过

auto cin2 = cin;
int a;
cin2 >> a;

但编译器只给我无法理解的错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:47: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructor ‘std::basic_istream<char, std::char_traits<char> >::basic_istream(const std::basic_istream<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:53: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
test.cpp: In function ‘int main()’:
test.cpp:6: note: synthesized method ‘std::basic_istream<char, std::char_traits<char> >::basic_istream(const std::basic_istream<char, std::char_traits<char> >&)’ first required here

正确的做法是什么?

最佳答案

标准类 std::istream 不可复制。您可以通过以下方式声明对 std::cin 的引用

decltype(auto) cin2 = ( std::cin );
int a;
cin2 >> a;

或者你可以这样写

auto &cin2 = std::cin;

要实现 istream 迭代器,您可以使用流的引用或指针。

关于c++ - 如何复制cin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389125/

相关文章:

C++ 循环 std::vector<std::map<std::string, std::string>>

c++ - 可能有多个 while (cin>>input)

c++ - 如何使 cin >> 不将 float 转换为整数?

c++ - 在 C++ 中使用 cin 时使用循环计数被忽略

c++ - 我需要使用 'using namespace std' 命令吗?

各种类型指针的 C++ 容器

C++ 需要一种很好的技术来播种不使用 time() 的 rand()

c++ - 使用 QTableView 时将 QCombobox 选定文本设置为特定数据列

c++ - 抛出 C++ 异常时在调试器中中断程序

c++ - 如何让它读cin两次?