10

有谁知道为什么to_stringC++11 标准第 21.5 节中声明的各种函数缺少 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 的新手。

4

2 回答 2

13

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

Shorts:所有默认提升的整数类型都丢失了;我想支持他们不会有任何收获。相比之下,较长的类型可能更昂贵,因此int应该为有空间意识的人提供。

于 2012-08-20T21:14:59.000 回答
4

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

于 2012-08-21T11:30:08.103 回答