C++11简介
C++11,之前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准。它取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:1998发布于1998年,第二版于2003年发布,分别通称C++98以及C++03,两者差异很小)。
发布时间 | 文档 | 通称 | 备注 |
---|---|---|---|
1998 | ISO/IEC 14882:1998 | C++98 | 第一个C++标准 |
2003 | ISO/IEC 14882:2003 | C++03 | 第二个C++标准 |
2011 | ISO/IEC 14882:2011 | C++11 | 第三个C++标准 |
2014 | ISO/IEC 14882:2014 | C++14 | 第四个C++标准 |
2017 | ISO/IEC 14882:2017 | C++17 | 第五个C++标准 |
参考链接:https://zh.wikipedia.org/wiki/C%2B%2B#C++标准
使用C++11编写代码的好处
可移植性好
例如:创建线程
(1) Posix API:
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
void *(*start_rtn)(void*),void *arg);
(2) Windows API:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性
DWORD dwStackSize,//堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress,//线程函数
LPVOID lpParameter,//线程参数
DWORD dwCreationFlags,//线程创建属性
LPDWORD lpThreadId//线程ID
);
(3) C++11:
std::thread timer_th(&Timer::TimerThread, this);
总结:C++11可以做到写一次代码,运行在所有支持C++11编译器的平台上。
如何学习C++11
- 新增语法
- 新增常用标准库
C++11的详细范围,强烈推荐!请点击我
常用的C++11新特性
- 空指针 nullptr
- 类型推导 auto
- 基于范围的for循环
- override修饰符
- 右值引用
- 移动语义 std::move
- lambda函数与表示式
- 智能指针shared_ptr和unique_ptr、weak_ptr
- std::thread
- std::mutex
- std::condition_variable
- std::future
- std::atomic
- std::chrono
- unordered容器: unordered_map、unordered_set
C++11新特性详解
空指针 nullptr
NULL是一个宏定义。
如果你想表示空指针,那么使用nullptr,而不是NULL。
#include<iostream>
using namespace std;
void test(void *p)
{
cout<<"p is pointer "<<p<<endl;
}
void test(int num)
{
cout<<"num is int "<<num<<endl;
}
int main(void)
{
test(NULL);
return 0;
}
编译:
$ g++ -o test test.cpp
main.cpp: In function ‘int main()’:
main.cpp:16:14: error: call of overloaded ‘test(NULL)’ is ambiguous
test(NULL);
编译报错了,提示我们有二义性,按照《重载函数匹配规则》,两个都可以匹配,因此最终报错。
类型推导 auto
int a = 10;
auto au_a = a;//自动类型推断,au_a为int类型
auto b = 10.0;
steady_clock的刻度是1纳秒,起点并非1970-01-01 00:00:00 UTC,一般是系统启动时间
auto t1=std::chrono::steady_clock::now();
基于范围的for循环
未完待续 2020/12/15
参考
- cppreference.com:C++11
- *C++11
- C++11教程:C++11新特性大汇总
- C++ 标准库概览(一分钟就看完了)
-
The 15 C++11 features you must really use in your C++ projects
以上排名分先后,越是在前面越是权威