C++11科普教程(未完待续 2020/12/15)

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

为什么建议你用nullptr而不是NULL?

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

C++ 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

参考

上一篇:牛顿迭代法的理解与应用( x 的平方根)


下一篇:2020-01-28 matlab常用编程学习