为什么std :: to_string没有短暂的重载?为什么没有noexcept?

时间:2012-08-20 21:11:09

标签: c++ c++11

有人知道为什么C ++ 11标准第21.5节中声明的各种to_string函数缺少short和unsigned short的重载吗?为什么没有声明这些函数noexcept怎么样?这是一整套重载:

string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);

我查看了导致这些功能被采纳的提案(N1803,N1982,N2408),但没有一个有任何动机或理由。

如果我通过在一个帖子中提出两个(相当相关的,IMO)问题来违反协议,我道歉。我现在还是新人。

2 个答案:

答案 0 :(得分:13)

异常:noexcept没有std::string构造函数,所以这是不可能的(即字符串内存分配可能会失败)。

短片:缺少所有默认提升的整数类型;我想从支持他们中得不到任何好处。相比之下,较长的类型可能更昂贵,因此应为空间意识提供int

答案 1 :(得分:4)

这些函数都对传递给它们的值进行算术运算。小于int的类型被提升为int(或unsigned int)以进行算术运算,因此使类型小于int的版本没有计算优势。 (这些来自我的建议,因此我非常了解历史)