C++20 引入了
<format>
(C++23 很快就会引入 <print>
)。我喜欢这些方法,并且在支持时我总是尝试使用 std::format
,而不是使用一系列 <<
。
但我注意到这种演变似乎只出现在输出中。为什么没有像
<scan>
这样的输入法?
std::format
和std::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 为目标,但承认进一步的延迟比在标准中添加“半生不熟”的设计更好。
截至2023年2月,该提案仍被标记为“需要修订”,大概正在等待作者继续进行。
我尝试了 github 上的一些可用的 C++ 扫描函数:
发现它们与 C scanf() 语法相比要弱得多,但它们包含大量代码并且相当复杂。 也许这就是不将 std::scan 添加到新标准的原因 - 仍然没有足够好的提案。
我喜欢来自https://stackoverflow.com/a/79048448/9350149的强大而简单的方法,但它需要更多的格式支持开发。