C++11---nullptr

【1】关于0 与 NULL

【2】关于nullptr和void*的称法

nullptr习惯被称作指针空值

void*习惯被称作无类型指针

【3】nullptr 和 nullptr_t

nullptr习惯被称作指针空值

nullptr_t习惯被称作指针空值类型

即表示指针空值类型并非仅有nullptr一个实例

可以通过nullptr_t来声明一个指针空值类型的变量

除去nullptr以及nullptr_t以外,C++中还存在各种内置类型。

C++11标准严格规定了数据间的关系。常见规则简单如下:

1. 所有定义为nullprt_t类型的数据都是等价的,行为也完全一致

2. nullprt_t类型数据可以隐式转换成任意一个指针类型

3. nullptr_t类型数据不能转换为非指针类型,

即使使用reinterpret_cast<nullptr_t>也是不可以的

4. nullptr_t类型数据不适用算术运算表达式

5. nullptr_t类型数据可以用于关系运算表达式,

但仅能与nullptr_t类型数据或者指针类型数据进行比较

当且仅当关系运算符为==,<=,>=等时返回true

示例代码如下:

 1 #include <iostream>
 2 using namespace std;
 3
 4 void fun(int n) { cout << "fun(int n) : " << n << endl; };
 5 void fun(int *p) { cout << "fun(int *p) : " << p << endl; };
 6
 7 void main()
 8 {
 9     int nZero = 0;
10     int nValue = NULL;        // ok
11     int *pZero = 0;        // ok
12     int *pNULL = NULL;        // ok
13     int *pnullptr = nullptr;    // ok
14     void *pEmpty = nullptr;        // ok
15
16 //    int nTemp = nullptr;    // error
17     /*
18     关于这条语句的编译错误提示信息如下:
19     error C2440: “初始化”: 无法从“nullptr”转换为“int”
20     本机 nullptr 只能转换为 bool 或 使用 reinterpret_cast 转换为整型
21     */
22     bool bIs = nullptr;
23     int nTemp = reinterpret_cast<int>(nullptr);
24
25     fun(0);  //--> fun(int n) : 0
26     fun(NULL); // -->fun(int n) : 0
27     fun((int*)0); // -->fun(int *p) : 00000000
28     fun(nullptr); // -->fun(int *p) : 00000000
29
30     nullptr_t pnull;
31     fun(pnull); // -->fun(int *p) : 00000000
32
33     char* pchar = pnull;
34     int* pInt = pnull;
35
36 //    int n1 = pnull;
37 //    int n2 = reinterpret_cast<int>pnull;
38
39     if (0 == nullptr)
40     {}
41 //    if (nullptr)
42 //    {}
43
44 //    nullptr += 1;
45 //    pnull * 10;
46
47     cout << sizeof(nullptr) << endl; // 4
48 }

Good  Good  Study,  Day  Day  Up.

顺序  选择  循环  总结

时间: 2024-11-05 18:47:52

C++11---nullptr的相关文章

C++11 并发指南一(C++11 多线程初探)(转)

引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉. 相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的. 如果你对 C+

C++学习笔记28:运行期型式信息

RTTI 运行期标识对象的型式信息 优势:允许使用指向基类的指针或引用自如地操作派生类的对象 typeid:获取表达式的型式:type_info:型式信息类 头文件:typeinfo 对象转型模板 dynamic_cast:动态转型 static_cast:静态转型 reinterpret_cast:复诠转型 const_cast:常量转型 typeid操作符与type_info类 type_info类 编译器实现的动态型式信息型式 用于在程序运行时保存数据对象的型式信息 不能直接使用该类,只能

设计模式学习总结:(10)单例模式探讨

单例模式(Singleton)很简单,从名字也很容易知道解决的是唯一对象创建问题,很多时候,如果因为一个对象只需要存在一份,正常对象创建方式有种杀鸡用牛刀的感觉.同时,也不能假设用户素质足够高,至少我们要保证从语法上,多个对象存在是不合理的,我们所要做的,就是约束对方的行为. 意图: 保证一个类仅有一个实例,并提供一个全局访问点. 在c++中为了限定对象的创建,我们需要把构造函数设置为私有,保证无法从外界构造,同时需要一个静态变量指针来保存唯一对象,最后至少还需要一个函数来获得这个唯一对象. c

GoogleCpp风格指南 5) 其他特性_part2

5.10 前置自增和自减 Preincrement and Predecrement Tip 对于迭代器iterator和其他模板对象template object使用前缀形式(++i)的自增, 自减运算符; 定义: 对于变量在自增(++i 或 i++)或自减(--i 或 i--)后, 表达式的值没有被用到的情况下, 需要确定到底是使用前置还是后置的自增(自减); 优点: 不考虑返回值的话, 前置pre自增(++i)通常要比后置post自增(i++)效率更高; 因为后置自增(自减)需要对表达式的

Chapter3 New Language Features

ch3.1   new c++11  language features 3.1.1  important minor syntax changes space in template expression                vector< list<int> >      // ok in each c++ version                vector< list<int>>      // ok since c++11 null

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

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)