Hãy xem chương trình nhỏ bé này.C++ 11 bao gồm <cstdlib> đôi khi C++ 03 sẽ không?
#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;
}
Biên dịch tạo ra các thông điệp lỗi sau đây:
$ 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
thể hiểu được. Tất cả những điều này tồn tại trong tiêu đề "cstdlib" mà tôi đã bỏ qua.
Tuy nhiên, biên soạn với:
$ g++ -std=c++0x -o main main.cpp
không tạo ra sự cố nào.
nhìn vào nguồn gốc của "cstdlib" tiêu đề, tôi thấy đoạn mã sau ở dưới cùng:
#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
Tôi không chắc chắn nếu đó là có liên quan hay không .. tập tin tiêu đề đầy đủ Mã số here
câu hỏi cuối cùng của tôi là, tiêu chuẩn mới có đảm bảo rằng tất cả cstdlib sẽ được đưa vào không gian tên chung khi bạn đưa iostream vào không?
Tôi không thể tìm thấy bất kỳ tài liệu nào về vấn đề này. Xuất hiện theo cách đó với tôi, nó có xuất hiện theo cách đó với bạn không?
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Btw, danh hiệu này là hoàn toàn sai lệch. C++ 11 ** là ** C++. Nó không phải là một ngôn ngữ riêng biệt mới. –