为什么没有
template <typename T>
T std::from_string(const std::string& s);
在C ++标准中? (看看std::to_string()
函数是怎样的,我的意思是)
PS - 如果您对未被采纳/考虑的原因有所了解,只需回答/评论并说出它是什么,而不是低估。我实际上没有提出将其纳入标准的提案。
答案 0 :(得分:2)
正如Nicol Bolas指出的那样,to_string
永远不是模板,而只是一组重载函数。制作这样的函数模板并不好,因为通常这样做可能效率不高,而且只能表现得像字符串流一样。所以from_string
同样不应该是函数模板,而应该是简单的函数。由于它们的参数类型相同(std::string
),因此它们的名称不应相同。所以stoi
,stof
等都是你想要的。
to_string
和sto*
在语言环境方面的行为也相似:它们都尊重当前的C语言环境。相反,C ++ IOStream不受C语言环境的影响。只有在std::locale::global
设置C ++全局区域设置后创建它们,或者使用不同的区域设置手动imbue
时,才能覆盖它们。
答案 1 :(得分:1)
std::to_string()
具有更严格的任务:它由一组明确定义的非模板化重载组成,每个重载都有一个可以轻易划分的类型。因此,很容易定义完全函数应该做什么。
您对std::from_string()
的提议范围更广。它会有棘手的角落,例如错误处理注意事项,精确设置等。已经可用的流功能可能就足够了。