系列文章目录
C++11新特性——nullptr
C++11新特性——右尖括号>
C++11新特性——变量列表初始化
C++11新特性 ——using别名 … = …
C++11新特性——decltype
C++11新特性 —— auto详解
C++11新特性——decltype
C++11——仿函数原理及使用场景
C++11——Lambda匿名函数
C++11新特性——std::bind参数绑定
C++11新特性——std::function
C++智能指针——unique_ptr
C++智能指针——shared_ptr/weak_ptr
文章目录
前言
C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。
1998 年,C++ 标准委员会发布了第一版 C++ 标准,并将其命名为 C++ 98 标准。据不知名人士透露,《带注释的C++参考手册》这本书对 C++ 98 标准的制定产生了很大的影响。
经过作者的不断迭代,一本书往往会先后发布很多个版本,其中每个新版本都是对前一个版本的修正和更新。C++ 编程语言的发展也是如此。截止到目前(2020 年),C++ 的发展历经了以下 3 个个标准:
2011 年,新的 C++ 11 标准诞生,用于取代 C++ 98 标准。
2014 年,C++ 14 标准发布,该标准库对 C++ 11 标准库做了更优的修改和更新;
2017 年底,C++ 17 标准正式颁布;
虽然学习 C++11 需要花些时间,但这是非常值得的;C++11 非常实用,它不但提高了开发效率,还让程序更加健壮和优雅。程序员应该乐于升级换代已有的知识,而学习和使用 C++11 早就是大势所趋。
|版本声明:山河君,未经博主允许,禁止转载
新特性nullptr
众所周知的,C++支持函数重载,这使得函数名相同的情况下,编译器可以根据参数数量和类型选择所要执行的函数,那么如下例子大家觉得会输出什么呢?
using namespace std;
void fun(int i)
{
cout << "fun1 " << i << endl;
}
void fun(const char* p)
{
if(p!= null)
cout << "fun2 " << p << endl;
}
int main(int argv, char* argc[])
{
fun(NULL);
}
输出结果为
fun1 0
但实际上我们的目的是想调用第二个函数,什么都不应该打出才对,为什么会调用到第一个函数呢,这是因为C++对于null的定义实际上是这样的,它实际就是个0
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况。
总结
仍在持续更新中~
如果对您有所帮助,请点个赞!