有人知道为什么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)问题来违反协议,我道歉。我现在还是新人。
答案 0 :(得分:13)
异常:noexcept
没有std::string
构造函数,所以这是不可能的(即字符串内存分配可能会失败)。
短片:缺少所有默认提升的整数类型;我想从支持他们中得不到任何好处。相比之下,较长的类型可能更昂贵,因此应为空间意识提供int
。
答案 1 :(得分:4)
这些函数都对传递给它们的值进行算术运算。小于int的类型被提升为int(或unsigned int)以进行算术运算,因此使类型小于int的版本没有计算优势。 (这些来自我的建议,因此我非常了解历史)