C++11 中没有“stoshort, unsigned short”函数吗? [关闭]
Posted
技术标签:
【中文标题】C++11 中没有“stoshort, unsigned short”函数吗? [关闭]【英文标题】:No "stoshort, unsigned short" functions in C++11? [closed]C++11 中没有“stoshort, unsigned short”函数吗? [关闭] 【发布时间】:2011-10-25 20:40:19 【问题描述】:C++11 引入了便利函数stoi
、stol
、stoll
、stoul
、stoull
、stof
、stod
和 stold
,它们将字符串转换为整数、long、long long、unsigned long、unsigned long long、float、double 或 long double。
为什么不喜欢short和unsigned short?
除了这个遗漏让我很恼火之外,我发现自己不得不在这样的情况下尴尬地工作:
#include <string>
struct S
S(short);
;
int main()
S sstd::stoi("4");
错误:
test.cpp: In function 'int main()':
test.cpp:10:23: error: narrowing conversion from 'int' to 'short int' inside [-fpermissive]
如果有stos
,我想改为写S sstd::stos("4");
...
相反,我必须写 S sstatic_cast<short>(std::stoi("4"));
... 哦等等,那也不会这样做,它会默默地截断比短裤长的整数,而不是假设的 stos
函数,如果整数不适合短。所以基本上我回到了我的 C++11 之前的替代品 stringstreams
、boost::lexical_cast
等。
编辑:由于人们似乎很难找到我的实际问题,所以 为什么没有 stos
和 stous
函数与其他函数一起使用强>?
【问题讨论】:
Q 是什么?如果您知道这些功能不存在,现在就无法将它们添加到标准中,您将需要等待几十年,直到下一个标准到来。简单的答案:标准委员会不会找到任何令人信服的理由来寻找它和其他功能一样有用,他们不能包含任何看起来有用的东西,所以他们选择了他们认为最有用的东西。 @Adam:当然可以,但我也可以编写自己的stoi
和stol
。标准化这些东西的全部意义在于人们不必一遍又一遍地编写它们。
@AdamRosenfield:这样我们就可以责怪标准委员会没有添加它! ;-)
@Als:我很想知道为什么 10 种内置整数类型中的 8 种的转换函数被认为是有用的,但不是这两种。这就是我在这个问题中要问的。
@AJG85:嗯,“long int”和“unsigned long int”是“long”和“unsigned long”的同义词,没有“long float”这样的东西。跨度>
【参考方案1】:
猜测:C++ 从 C(可能是 C99 变体)中获取 s-to-xxx 函数只是为了兼容;如果C++是独立开发的,就不会有这样的功能了。
【讨论】:
对。他应该问他们为什么不在 C 中。 那么为什么它们不在 C 语言中呢?为什么 C++ 会重蹈 C 的覆辙? 但他们添加了 stoi ...以上是关于C++11 中没有“stoshort, unsigned short”函数吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在没有任何构造函数的类的情况下,在 C++11 中自动生成类成员函数