C++11引入了方便函数stoi、stol、stoll、stoul、stoull、stof、stod和stold,它们分别将字符串转换为整数、长、长、无符号长、无符号长、浮点、双或长双。
为什么没有对短和未签短的爱?
除了这种疏漏使我从原则上感到烦恼之外,我还发现自己不得不在这样的情况下笨拙地工作:
#include <string>
struct S
{
S(short);
};
int main()
{
S s{std::stoi("4")};
}错误:
test.cpp: In function 'int main()':
test.cpp:10:23: error: narrowing conversion from 'int' to 'short int' inside { } [-fpermissive]我想写S s{std::stos("4")};,如果有一个stos.
相反,我不得不写S s{static_cast<short>(std::stoi("4"))};..。哦,等等,这也不起作用,它会悄悄地截断整数而不是空号,而不是假设的stos函数,如果整数不适合空的话,就会抛出异常。因此,基本上,我回到了我的预C++11的stringstreams,boost::lexical_cast等的替代品。
编辑stos :既然人们似乎很难找到我的实际问题,那就是,为什么没有和函数与其他函数一起使用
发布于 2011-10-25 20:59:28
猜测: C++从C(可能是C99变体)获取s到xxx函数只是为了兼容性;如果C++是独立开发的,就不会有这样的函数。
https://stackoverflow.com/questions/7895583
复制相似问题