【问题标题】:Why do C++ standards introduce more output methods without input counterparts?为什么 C++ 标准引入了更多没有对应输入的输出方法?
【发布时间】:2023-02-23 06:16:38
【问题描述】:

C++20 引入了<format>(C++23 很快引入了<print>)。我喜欢这些方法,并且我总是在支持时尝试使用std::format,而不是使用一系列<<

但我注意到这种演变似乎只出现在输出中。为什么没有类似<scan> 的输入?

【问题讨论】:

  • 你假设的scan会做什么而>>不会?
  • 这不是真正可以在此站点上合理回答的问题。
  • @MarkRansom 我想它会类似于scanf,所以它会让做cin >> scan("%d,%d,%d", a, b, c)cin >> a; cin.get(); cin >> b; cin.get(); cin >> c容易得多。
  • @DavidG 你知道你可以链接那些,对吧?可以表示为cin >> a >> b >> c
  • 与 scanf 更接近的是 char sep; if ((cin >> a >> sep) && sep == ',' && (cin >> b >> sep) && sep == ',' && (cin >> c)) ...,这当然令人讨厌。我通常会对任何重要的格式化输入使用字符串流和/或正则表达式。很想知道格式化输入标准的未来发展。

标签: c++ io c++20


【解决方案1】:

std::formatstd::print 本身已经是一个相当大的库添加,我可以想象标准委员会考虑添加额外功能的有限资源不允许他们同时考虑输入等价物。

也可能是委员会希望在添加等效输入之前首先收集更多关于std::format/std::print的经验,或者在原则上、提议的实施细节或此类添加的优先级中存在反对这种添加的情况.

我找不到任何指向这些方向的明确声明,我也没有内幕消息。

无论如何,委员会仍在考虑 std::scan 提案作为 std::format 提案的后续提案,请参阅 https://github.com/cplusplus/papers/issues/493 以获取该提案迄今为止所经历的程序日志。你还可以看到关于设计方向等的民意调查。自 2019 年以来似乎没有太多活动,但我不确定这是否真的意味着什么。

在 2022 年 3 月的 reddit 帖子 here 中,该提案的作者之一、scnlib 的作者 Elias Kosunen 提到,在继续该提案之前,仍有一些不确定的设计问题需要确定,希望能够以 C++26 为目标,但承认更长时间的延迟比向标准添加“半生不熟”的设计更可取。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多