目录
2、我们的目标:较全面地认识C++2.0新特性,并从实例中获得验证
一、语言特性之演进、环境与资源
1、你应具备的基础:C++语法,语意
2、我们的目标:较全面地认识C++2.0新特性,并从实例中获得验证
3、C++历史:C++标准演化
-
c++ 98(1.0)
-
c++03(TR1,technical report 1)
-
c++11(2.0)
-
c++14
-
c++17
4、头文件
C++2.0新特性包括语言和标准库两个层面,标准库以头文件(header files)形式呈现。C++标准库的头文件的使用不带.h;新式C语言的头文件的也不带.h;旧式C语言标准库的仍能使用。
5、了解编译器对C++2.0的支持
(1)Visual Studio,Gcc,Clang,Intel等编译器支持C++11特性:
(2)Dev-C++5.11,MinGw with GCC 4.9.2 对C++ 11的支持
(3)确认对C++11的支持:macro _cplusplus(宏)
示例代码:
#include<iostream>
using namespace std;
int main() {
cout << __cplusplus << endl;
system("pause");
return 0;
}
QT运行结果:
C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处理器宏以针对最新的 C++ 语言标准支持报告更新的值。 默认情况下,Visual Studio 始终为 __cplusplus 预处理器宏返回值“199711L”,__cplusplus 预处理器宏通常用于报告。 因为很多现有代码需要此宏的值与“199711L”匹配,所以编译器不会更改此宏的值,除非通过使用 /Zc:__cplusplus 编译器选项进行显式选择。 从 Visual Studio 2017 版本 15.7 开始便已提供 /Zc:__cplusplus 选项,该选项在默认情况下处于禁用状态。 在早期版本的 Visual Studio 中,在默认情况下或者在指定了 /Zc:__cplusplus- 的情况下,Visual Studio 针对 __cplusplus 预处理器宏返回值“199711L”。 /permissive- 选项不会启用 /Zc:__cplusplus。
在启用了 /Zc:__cplusplus 选项的情况下,__cplusplus 报告的值取决于 /std 版本切换设置。 下表列出了该宏的可能值:
/Zc:__cplusplus 开关 | /std:c++ 开关 | __cplusplus 值 |
---|---|---|
Zc:__cplusplus | /std:c++14(默认) | 201402L |
Zc:__cplusplus | /std:c++17 | 201703L |
Zc:__cplusplus | /std:c++latest | 201704L |
Zc:__cplusplus-(已禁用) | 任意值 | 199711L |
未指定 | 任意值 | 199711L |
编译器不支持 C++98、C++03 或 C++11 的标准切换。
若要更精细地检测对编译器工具集的更改,请使用 _MSC_VER 预定义宏。 此内置宏的值会随 Visual Studio 2017 和更高版本中的每个工具集更新而增加。 _MSVC_LANG 预定义宏向标准版本报告 /Zc:__cplusplus 是启用还是禁用状态。 如果启用 /Zc:__cplusplus,则 __cplusplus == _MSVC_LANG
。
-
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
-
选择“配置属性” > “C/C++” > “命令行”属性页。
-
将 /Zc:__cplusplus 或 /Zc:__cplusplus- 添加到“其他选项:”窗格。
未开启前:
开启后:
6、C++资源
(1)C++ FAQ,from Stroustrup:
(2)常用网页:
-
www.cplusplus.com
-
en.cppreference.com
-
gcc.gnu.org
(3)书籍:
-
The c++ standard library
-
c++ primer
-
the c+ programming langugae
-
effective Modern c++
7、C++2.0课程目录
语言部分:
- Variadic Templates
- move Semantics
- auto
- Range-base for loop
- Initializer list
- Lambdas
- 。。。。。。
标准库部分:
- type_traits
- Unordered容器
- forward_list
- array
- tuple
- Con-currency
- RegEx
- 。。。。。。