Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 否";sto{short,unsigned short}";C+中的函数+;11?_C++_String_C++11 - Fatal编程技术网

C++ 否";sto{short,unsigned short}";C+中的函数+;11?

C++ 否";sto{short,unsigned short}";C+中的函数+;11?,c++,string,c++11,C++,String,C++11,C++11引入了方便函数stoi,stol,stoll,stoull,stof,stod和stold,它们分别将字符串转换为整数、长、长、无符号长、无符号长、浮点、双精度或长双精度 为什么没有爱的短和未签名的短 除了这一疏忽让我原则性地恼火之外,我还发现自己不得不在这样的情况下笨拙地工作: #include <string> struct S { S(short); }; int main() { S s{std::stoi("4")}; } 我想改为写sss{

C++11引入了方便函数
stoi
stol
stoll
stoull
stof
stod
stold
,它们分别将字符串转换为整数、长、长、无符号长、无符号长、浮点、双精度或长双精度

为什么没有爱的短和未签名的短

除了这一疏忽让我原则性地恼火之外,我还发现自己不得不在这样的情况下笨拙地工作:

#include <string>

struct S
{
    S(short);
};

int main()
{
    S s{std::stoi("4")};
}
我想改为写
sss{std::stos(“4”),如果只有
STO

相反,我必须编写
S{static_cast(std::stoi(“4”))}。。。哦,等等,这也不行,它会默默地截断比short长的整数,而不是假设的
stos
函数,如果整数不适合short,它会抛出异常。所以基本上我回到了我的C++11之前的版本,包括
stringstreams
boost::lexical_cast
,等等


< > > > >编辑< /强>:由于人们似乎很难找到我的实际问题,所以<>强>为什么没有<代码> STOS和 Stase< /Case>函数与其他的< /强>?/P> > P>一起进行猜测:C++从C(可能是C99变体)中获取S到XXX函数,只是为了兼容性;如果C++独立开发,则没有这样的函数。< /P>和Q是什么?如果您知道这些函数不存在,那么现在就不能将它们添加到标准中,您需要等待几十年,直到下一个标准出现。简单回答:标准委员会不会找到任何令人信服的理由认为它与其他函数一样有用,它们不能包含任何看起来有用的东西,所以他们选择了他们认为最有用的东西。@Adam:当然,但我可以自己写
stoi
,也可以写
stol
。标准化这些东西的全部意义在于人们不必一遍又一遍地写它们。@AdamRosenfield:这样我们就可以责怪标准委员会没有添加它!;-)@Als:我很想知道为什么10种内置整数类型中的8种被认为是有用的转换函数,而不是这两种。这就是我在这个问题上要问的。@AJG85:嗯,“long int”和“unsigned long int”是“long”和“unsigned long”的同义词,没有“long float”这个词。对。他应该问他们为什么不在C里。那么他们为什么不在C里呢?为什么C++重复C的错误?但是他们增加了STOI…
test.cpp: In function 'int main()':
test.cpp:10:23: error: narrowing conversion from 'int' to 'short int' inside { } [-fpermissive]