为什么std::to_string没有短过载?为什么没有例外
Why no short overloads for std::to_string? Why no noexcept?
有人知道为什么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类型的版本不会带来计算上的好处
相关文章:
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 如果我注释掉换行符,为什么'string'会成为一个不合格的变量
- 为什么我的函数接受"std::string"进行排序不会改变它?
- 为什么unordered_set<string::iterator>不起作用?
- 为什么 std::string s = "123" 当不涉及副本时被视为复制初始化?
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 为什么 string::begin() 在即时窗口中输出整个字符串
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 为什么我不必从 std::string 的函数中释放字符串c_str?
- 为什么std::string没有(显式)const char*强制转换
- 为什么 string::replace 在 C++11 中没有指定分配器的例外?
- 为什么<string>字符串对象需要 #include 而不是字符串文本?
- 为什么 --string::end() 可以编译,而 --string.size() 不能编译?
- 为什么string.empty()在字符串包含一个值时评估为true
- 为什么 string.length()=0 在使用 string[i] 处理字符串后
- 为什么 string.find( "</a>" ) 找不到"</a>"?
- 为什么string传递给printf时必须转换为c_str (c string)
- 为什么string::compare返回int类型?
- 为什么string不是vector的(子类)?
- 为什么string::substr行为不端