atoi函數和std::stoi函數的不同點
出處不同
atoi()
函數是C標准庫函數,頭文件為#include<stdlib.h>
。同類型函數還包括atol()
,atof()
,strtol()
,strtof()
等;std::stoi()
函數是C++11開始加入的STL標准模版庫的函數,頭文件為#include<string>
。同類型函數還有std::stol()
,std::stoll()
;
功能不同
atoi()
- 會跳過前面的空白字符(包括空格,tab符號等),直到遇到第一個非空字符,並在遇到下一個非數字字符時結束轉換;
- 轉換的內容為正負符號和數字字符;
- 並且返回值為十進制;
std::stoi()
- 會跳過最前面的空白字符(包括空格,tab符號等),直到遇到第一個非空字符,並在遇到下一個非數字字符時結束轉換;
- 轉換的內容為正負符號和數字字符;
- 可以指定開始轉換的pos;
- 可以轉換成十進制,八進制和十六進制;
異常處理不同
atoi()
函數在轉換時,如果遇到入參str不能轉換或者str為空字符串時,返回值為0,不會拋出異常;std::stoi()
函數在轉換時,如果入參str是字母或者空字符串而無法轉換成數字時,會拋出std::invalid_argument
異常,使用者必須手動處理異常,否則會造成程序crash;