Eche un vistazo a este pequeño programa.C++ 11 incluye <cstdlib> en momentos en que C++ 03 no?
#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;
}
Compilación crea los siguientes mensajes de error:
$ 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
comprensible. Todos estos existen en el encabezado "cstdlib" que no incluí.
Sin embargo, compilar con:
$ g++ -std=c++0x -o main main.cpp
crea ningún problema.
mirando a la fuente de la "cstdlib" de cabecera, veo el siguiente código en la parte inferior:
#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
no estoy seguro si eso es relevante o no .. archivo de cabecera completa código here
mi última pregunta es, ¿el nuevo estándar garantiza que todos los cstdlib se incluirán en un espacio de nombres global cuando se incluye iostream?
No encuentro ninguna documentación al respecto. Me parece así, ¿te parece así?
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Por cierto, este título era totalmente engañoso. C++ 11 ** es ** C++. No es un nuevo idioma separado. –