我在學習C++時遇到的第一個問題是,某些編譯器支持itoa
函數,但實際上沒有在ANSI-C標準中定義(因此通常被認爲是不好的做法)。爲什麼直到現在,C++中沒有明確包含整數到字符串轉換?
我已經看到了多個解決方案,如使用stringstream
或snprintf
,它一直都覺得很迂迴的我,終於在C++ 11有std::to_string
這感覺從語言的角度乾淨多了。
但爲什麼需要這麼長時間才能添加更直接的方法?除了一些關於效率的討論之外,我很難找到任何東西,並且沒有理由無意改變標準。有沒有正式說過爲什麼沒有包括這個,或者他們爲什麼最終決定將它添加到C++ 11中?是否有任何關於將此添加到C的未來版本的討論?
那麼,問題的一部分就是動態內存分配。除'malloc','calloc'或'realloc'之外,沒有任何C API爲您分配內存。將整數轉換爲字符串需要在某處寫入字符數組,而C方式則是讓您傳遞一個緩衝區來完成此操作。因此'sprintf'和'snprintf'。另外還有如何格式化等問題。C++從C語言的大部分開始,需要很長時間才能真正克服它。現在,可以通過動態內存管理來編寫整個應用程序,而幾乎不需要調用'new' ...... –
@JoeZ:現在應該期望應用程序不會明確地調用'new',除了它們的停止間隔執行'make_unique'預測C++ 14 ;-)當然會有例外,例如使用自定義智能指針的應用程序。 –
這不是基於意見的,雖然它有點無知。 Konrad或我都不知道確切的理由(但無論如何回答我們所知道的事實)並不意味着沒有理由。這個問題基本上已經被封爲「太難」了。 –