2014-02-24 60 views
2

我想使用C庫如cstdiocstdlib,我可以同時使用:我應該使用std :: old_c_functions還是隻使用old_c_functions?

int i = atoi("123"); 

int i = std::atoi("123"); 

都工作得不錯。我應該使用哪一個?它們是否相同?

+0

那麼'std :: atoi'是C++標準的'atoi',那麼爲什麼還要使用非標準的呢? –

+0

[cstdio stdio.h namespace]可能的重複(http://stackoverflow.com/questions/10460250/cstdio-stdio-h-namespace) – 2014-02-24 05:18:06

+0

我認爲這也取決於您的優化級別。如果你能夠在O2或更高版本上編譯你的代碼,這兩種方法幾乎沒有區別。如果您必須使用O0或O1,則最好只使用'atoi': – P0W

回答

7

對於便攜性,你應該使用std版本,原因有二:

  • 標準並不保證C庫函數倒入全局命名空間;它只是允許實現來做到這一點。這意味着如果您更改實現,您的代碼可能無法編譯。
  • 某些函數(例如atoi,但是數學函數)在C++中有額外的重載。至少有一個流行的庫將C重載轉儲到全局名稱空間,但不是C++重載。這意味着如果您更改了實現方式,您的代碼可能會以奇怪和令人生氣的方式改變其行爲。
相關問題