C++11的关键字nullptr

nullptr是为了解决原来C++中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0。

观察如下代码

在C++98中,NULL可以代表0,这样对于如上两个函数来说,就会造成二义性了。那么为了解决这种二义性,在C++11中就引入了一个新的关键字nullptr来代表空指针,并且nullptr本身不能代表零。

时间: 2024-12-17 01:00:07

C++11的关键字nullptr的相关文章

C++11老关键字的新含义(auto, using,extern)

http://blog.csdn.net/cnsword/article/details/8034947 公司可以使用c++11.看大牛的代码模仿使用,所以现在已经不知道什么使用的是c++的语法还是c++11的语法了...不知道算不算是一种悲哀 C++11对关键字进行了修订,加入了nullptr.constexpr.decltype.default.static_assert等,同时原有的关键字(auto,using,extern)含义和用途进行了修订.在这里主要了解一下对auto.using.

11. JavaSE-Final关键字详解

Final关键字: Final 可以修饰类.方法.变量 Final修饰的类不可以被继承 Final修饰的方法不可以被覆盖 Final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 继承弊端: 打破了封装性,而final可以可以解决乱用继承的情况. 为什么要用final修饰变量? 其实在程序如果一个数据是固定的,那么直接使用这个数据就可以了,但是这样这样阅读性差,所 以他给数据起个名称,而且这个变量名称的值不能变化,所以加上final固定. 写法规范: 常量所有字母

C++11 auto关键字

在使用关键字auto的时候,遇到了一个问题,如下: 我想修改pair<int,queue<int> >中queue,在for(auto p :pq)循环中修改生效,退出循环后,修改失效. 改为 for(auto &p :pq)即可. 原因: auto 声明的是一个变量,会完全复制原来的对象,修改的是新生成的对象. auto & 声明的是一个引用,修改原来的对象 原文地址:https://www.cnblogs.com/MalcolmMeng/p/9749912.ht

c++11 using关键字代替typedef定义函数指针

#include <windows.h> typedef int(__stdcall *pMessageBoxA)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); using pFnMessageBoxA = int(__stdcall *)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); int main() { pMessageBoxA MessageBoxA

C++11新特性之三——nullptr

1. 引入nullptr的原因 引入nullptr的原因,这个要从NULL说起.对于C和C++程序员来说,一定不会对NULL感到陌生.但是C和C++中的NULL却不等价.NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro). 1.1 NULL在C中的定义 在C中,习惯将NULL定义为void*指针值0: #define NULL (void*)0 但同时,也允许将NULL定义为整常数0. 1.2 NULL在C++中的定义 在C++中,NULL却被明确定

C++11 之 nullptr

C++11 中, nullptr 是空指针,可用来给 (指向任意对象类型的) 指针进行赋值 广义整型 (integral types) = char, short, int, long, long longnd and their unsigned counterparts, and bool, wchar_t, char16_t, and char32_ 1  调用重载函数 0 在 C++ 中,被首先视为 int 型.NULL 在 C++ 中,首先视为广义整型 (integral types)

c++11 NULL、0、nullptr

C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL;foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #define NULL ((void *)0) 也就是说NULL实际上是一个void *的指针,然后吧void *指针赋值给int *和foo_t *的指针的时候,隐式转换成相应的类型.而如果换做一个C++编译器来编译的话是要出错的,因为C++是强类型的,void *是不能隐式转换成其他指针类型的,所以通常

c++11深入学习

委托构造函数 在引入C++ 11之前,如果某个类有多个重载的构造函数,且这些构造函数中有一些共同的初始化逻辑,通常都需要再编写一个带参数的初始化函数,然后在这些构造函数中调用这个初始化函数.在C++ 11中,再也不用这么麻烦了.我们可以实现一个最基础的构造函数,其他构造函数都调用这个构造函数.示例代码如下: 1 class CPerson 2 { 3 public: 4  CPerson() : CPerson(0, "") { NULL; } 5  CPerson(int nAge)

c++ 11 key note

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute