std::strtol 和 std::stoi 有什么区别
What are the differences between std::strtol and std::stoi?
免责声明:链接指向 cppreference.com
所以我知道 std::atoi 已经被弃用了一段时间,建议使用 std::strtol 代替。
C++11 引入了 std::stoi,我试图理解为什么人们会选择使用它而不是std::strtol
。
据我了解,stoi 调用 strtol 但会抛出异常。 此外,它还返回一个整数而不是一个长整型。
这些是主要区别吗,我错过了什么?
这些是主要区别吗,我错过了什么?
较新的std::stoi
也可以直接从std::string
工作(因此您不必用.c_str()
调用乱扔代码(,并且可以选择通过size_t
为您提供第一个不匹配的字符作为索引,而不是作为指针。
这些更改简化了代码中的用法。
一个很大的区别是stoi
将std::string
作为其参数,因此您不必将.c_str()
附加到字符串上即可将其转换为整数。
如果要转换为long
,则可以改用stol
(同样,stod
、stof
stold
、stoul
、stoll
分别转换为double,
float
、long double
、unsigned long
和long long
(。
通过一个std::basic_string
并且你想得到一个int
,你会使用std::stoi()
。如果你喜欢出去long
你会打电话给std::stol()
。
我更喜欢stoi((而不是strtol((,因为前者在无效输入上抛出std::invalid_argument。坏GNUs libstdc++中的异常消息是没有帮助的。例如:"what((: stoi">
std:stoi
与C不兼容,并且包含<string>
库,该库具有其他无法由C编译器编译的面向对象的实现。它的主要用例场景(应该(涉及使用std:string而不是字节数组,以符合现代C++常见的做法。
实际上,我真的很想知道为什么没有一个 std::FromString 模板函数采用您希望将字符串转换为模板参数的类型。同样,ToString 模板函数执行相反的操作。
您可以轻松想象使用插入和提取运算符实现。
int i = std::FromString <int> (std::string ("2"))
int j = std::FromString <int> ("2")
std::string = ToString <double> (3.14159)
是的,当然函数名称不会有大写字母,它们可能是from_string和to_string。
当然,模板专业化是可能的。最后,确实没有限制类型必须是本机类型,对吧?
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- "using namespace std;"在C++的作用是什么?
- 传递给std::function template的template参数究竟代表什么
- "std::unique_XXX"命名约定背后的基本原理是什么?
- 什么是 std::exception::what() 以及为什么要使用它?
- C++如果必须在编译时确定大小,std::array 有什么意义?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 什么是自动 t1=std::make_tuple(case1==case2,整数)的值
- C++std::atomic在程序员级别保证了什么
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在 C# 中等效的 std::rotate() 是什么?
- 什么是 std::function::argument_type 的替代品?
- 什么是 std::jthread 在 c++20 中?
- std::enable_if 和 std::enable_if_t 有什么区别?
- "owned pointer"和 std::shared_ptr 的"stored pointer"有什么区别?