gpt4 book ai didi

c++ - 我必须设置 rdbuf 吗

转载 作者:太空狗 更新时间:2023-10-29 21:39:30 27 4
gpt4 key购买 nike

此代码的目的是支持通过 ./a.out < input_file_name 运行我的代码或者只是 ./a.out input_file_name .我知道我可以将我的阅读部分包装到一个带有参数 iostream& 的单独函数中, 所以我可以通过 ifstreamcin取决于是否argc == 2 .

int main(int argc, char* argv[]) {
if (argc != 1 && argc != 2) {
cerr << "usage file or <file" << endl;
}

ifstream in;
if (argc == 2) {
in.open(argv[1]);
cin.rdbuf(in.rdbuf());
}

string line;
while (getline(cin, line))
cout << line << "\n";
}

我上面的琐碎代码总是使用 cin读东西。我需要设置 cin 吗?回到原来的状态 rdbuf

我发现一些代码示例总是后退 rdbuf到它的原始值。我们必须这样做吗?更改 cin 或 cout 的 rdbuf 之后没有设置回原来的 rdbuf 是否会导致资源泄漏?

最佳答案

您正确地建议将读取包装到一个单独的函数中,该函数将 incin 作为参数传递。那将是最好的解决方案。

除此之外,回答您的问题:您不需要将其退回;但您可能会以这种方式伤害其他用户。使用cin 从某个文件中读取是非常意外的。以下在您的程序中使用 cin 的用户将很难正常使用 cin。如果您想保留您的代码,您可能应该将其设置回去。

为什么不只执行以下操作(将 cin 完全放在一边):

ifstream in;
if (argc > 2) {
in.open(argv[1]);
}
istream & input = (argc > 2 ? in : cin);

string line;
while (getline(input, line))
cout << line << "\n";

关于c++ - 我必须设置 rdbuf 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com