从 cin 或文件读取
当我尝试编译代码时,
istream in;
if (argc==1)
in=cin;
else
{
ifstream ifn(argv[1]);
in=ifn;
}
gcc 失败,抱怨 operator=
是私有的。有没有办法根据条件将 istream 设置为不同的值?
When I try to compile the code
istream in;
if (argc==1)
in=cin;
else
{
ifstream ifn(argv[1]);
in=ifn;
}
gcc fails, complaining that operator=
is private. Is there any way to set an istream
to different values based on a condition?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
in
指针,例如:You could use a pointer for
in
, e.g.:您可以用另一个替换 cin 的streambuf,在某些程序中,这比传递 istreams 而不直接引用 cin 的一般策略更简单。
尽管在控制离开 main 后使用 cin 的情况极为罕见,但如果您的程序可能会执行此操作,则上述 try-catch 可以避免未定义的行为。
You can replace cin's streambuf with another, and in some programs this is simpler than the general strategy of passing around istreams without referring to cin directly.
Even though it's extremely rare to use cin after control leaves main, the above try-catch avoids undefined behavior if that's something your program might do.
那么,它不是在抱怨“没有合适的构造函数可用”吗?无论如何,您可以按如下方式修改它。
So, is it not complaining "no appropriate constructor available" ? Anyways, you can modify it as below.
你不能像这样影响流。不过,您可以使用指向 istream 的指针来获得您想要实现的目标。
You cannot affect streams like this. What you want to achieve can be obtained using a pointer to an istream though.