为什么没有std :: from_string()?

时间:2016-08-26 15:02:17

标签: c++ getline text-parsing istream

为什么没有

template <typename T>
T std::from_string(const std::string& s);

在C ++标准中? (看看std::to_string()函数是怎样的,我的意思是)

PS - 如果您对未被采纳/考虑的原因有所了解,只需回答/评论并说出它是什么,而不是低估。我实际上没有提出将其纳入标准的提案。

2 个答案:

答案 0 :(得分:2)

正如Nicol Bolas指出的那样,to_string永远不是模板,而只是一组重载函数。制作这样的函数模板并不好,因为通常这样做可能效率不高,而且只能表现得像字符串流一样。所以from_string同样不应该是函数模板,而应该是简单的函数。由于它们的参数类型相同(std::string),因此它们的名称不应相同。所以stoistof等都是你想要的。

to_stringsto*在语言环境方面的行为也相似:它们都尊重当前的C语言环境。相反,C ++ IOStream不受C语言环境的影响。只有在std::locale::global设置C ++全局区域设置后创建它们,或者使用不同的区域设置手动imbue时,才能覆盖它们。

答案 1 :(得分:1)

std::to_string()具有更严格的任务:它由一组明确定义的非模板化重载组成,每个重载都有一个可以轻易划分的类型。因此,很容易定义完全函数应该做什么。

您对std::from_string()的提议范围更广。它会有棘手的角落,例如错误处理注意事项,精确设置等。已经可用的流功能可能就足够了。