为什么std::to_string没有短过载?为什么没有例外

Why no short overloads for std::to_string? Why no noexcept?

本文关键字:为什么 string std to      更新时间:2023-10-16

有人知道为什么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)问题违反了协议,我道歉。我还是SO的新手。

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

Shorts:所有默认提升的积分类型都缺失;我想支持他们不会有什么好处。相比之下,较长的类型可能更昂贵,因此int应该提供给有空间意识的人。

这些函数都对传递给它们的值进行算术运算。小于int的类型被提升为int(或无符号int)进行算术运算,因此使用小于int类型的版本不会带来计算上的好处