इस छोटे से कार्यक्रम को देखें।सी ++ 11 में <cstdlib> कभी-कभी सी ++ 03 नहीं होगा?
#include <iostream>
int main(){
int var = atoi("-99"); //convert string to int
var = abs(var); //takes absolute value
std::cout << var+1 <<'\n'; //outputs 100
return EXIT_SUCCESS;
}
संकलन निम्न त्रुटियों संदेशों बनाता है:
$ g++ -o main main.cpp
main.cpp: In function ‘int main()’:
main.cpp:5:13: error: ‘atoi’ was not declared in this scope
main.cpp:6:16: error: ‘abs’ was not declared in this scope
main.cpp:9:10: error: ‘EXIT_SUCCESS’ was not declared in this scope
समझ में आता है। ये सभी "cstdlib" शीर्षलेख में मौजूद हैं जिन्हें मैंने शामिल करने के लिए उपेक्षित किया था।
हालांकि, के साथ संकलन:
$ g++ -std=c++0x -o main main.cpp
कोई मुद्दा नहीं पैदा करता है।
"cstdlib" शीर्षक के स्रोत को देखते हुए, मैं देख रहा हूँ तल पर निम्नलिखित कोड:
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cstdlib>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cstdlib>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif
मुझे नहीं लगता है कि अगर प्रासंगिक है या नहीं .. पूर्ण हेडर फ़ाइल है कर रहा हूँ कोड here
मेरा अंतिम सवाल यह है कि, क्या नया मानक गारंटी है कि जब आप iostream शामिल करते हैं तो सभी cstdlib को वैश्विक नामस्थान में लाया जाएगा?
मुझे इस मामले पर कोई दस्तावेज नहीं मिल रहा है। मुझे उस तरह से दिखता है, क्या यह आपके लिए ऐसा प्रतीत होता है?
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Btw, इस शीर्षक पूरी तरह से भ्रामक था। सी ++ 11 ** ** सी ++ है। यह एक नई अलग भाषा नहीं है। –