nullptr】的更多相关文章

#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long *; //C++11新变量类型long long;constexpr unsigned long long * 为非法 typedef wchar_t * wchptr; /* 使用using或typedef声明的类型别名的变量实例初始化时,不同类型变量不可使用","写在同一行 如://…
C++11 中,nullptr 是空指针,可用来给 (指向任意对象类型的) 指针赋值 广义整型 (integral types) = char, short, int, long, long long and their unsigned counterparts, and bool, wchar_t, char16_t, and char32_ 1  调用重载函数 C++ 中,0 首先被视为 int 型,而 NULL 首先被视为广义整型 (integral types),至于具体是 int,l…
0和nullptr/NULL 至于指针(地址值),根据实际选择用0.NULL还是nullptr.对使用了C++11特性的项目,选用nullptr:对于C++03项目,推荐NULL,因为它像是一个指针…
nullptr是c++11中的关键字,表示空指针 要区分nullptr和NULL,首先要明白NULL的含义: NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 //C语言中NULL定义 #define NULL (void*)0 //c语言中NULL为void类型的指针,但允许将NULL定义为0 //c++中NULL的定义 #ifndef NULL #ifdef _cpluscplus //用于判定是c++类型还是c类型,详情看上一篇bl…
注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考.尊重作品作者成果,原文链接 :http://www.2cto.com/kf/201302/190008.html 1.为什要有nullptr       我们给一个指针赋初值的时候一般这么写  FILE* fp = NULL;       这里有个NULL的定义,一般情况下它是这么定义的: [cpp] #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #end…
看到同事用了一下nullptr.不是很了解这方面东东,找个帖子学习学习 http://www.cppblog.com/airtrack/archive/2012/09/16/190828.aspx NULL: NULL是c语言的东西,定义处: #define NULL ((void *)0) 我们可以写  int* i = NULL, foo_t* pObj = NULL. NULL实际上是一个void *的指针,然后吧void *指针赋值给int *和foo_t *的时候,会隐式转换成相应的类…
C/C++ 程序员都应该了解NULL, 0, nullptr,  NULL表示空指针,即指针不指向任何对象,C++11后有多了nullptr更好是表了这类概念,看看nullptr是如何实现的: const class nullptr_t { public: template<class T> inline operator T*() const {return 0;} template<class C, class T> inline operator T C::*() const…
  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 *是不能隐式转换成其他指针类型的,所以…
//error C2665: “go”: 2 个重载中没有一个可以转换所有参数类型 #include <iostream> void go(int num) { std::cout << "go num" << std::endl; } void go(char *p) { std::cout << "go p" << std::endl; } void main() { void *p = NULL; g…
3.空指针(nullptr) 早在 1972 年,C语言诞生的初期,常数0带有常数及空指针的双重身分. C 使用 preprocessor macroNULL 表示空指针, 让 NULL 及 0 分别代表空指针及常数 0. NULL 可被定义为 ((void*)0) 或是 0. C++ 并不采用 C 的规则,不允许将 void* 隐式转换为其他类型的指针. 为了使代码 char* c = NULL; 能通过编译,NULL 只能定义为0. 这样的决定使得函数重载无法区分代码的语义: void fo…
一 具体实现 代码(c++) const class nullptr_t { public: template<class T> inline operator T*() const { return 0; } template<class C, class T> inline operator T C::*() const { return 0; } private: void operator&() const; } 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++中连NULL和nullptr都有区别 NULL和nullptr 根据文章,应当做好NULL和nullptr的兼容工作 翻阅了一下qt的宏定义 #ifdef __GNC__ #define CC_GNU (__GNC__*100+__GNUC_MINOR__) #endif #ifdef CC_GNU #if CC_GNU >=406 #define COMPILER_NULLPTR #endif #endif #ifdef COMPILER_NULLPTR # define NU…
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针. 实际上来说,对于NULL也是一样.关于NULL还有一些不确定因素,因为其实现允许给NULL一个整型而不必是int(比如说long).这并不常见,但是也无关紧要,因为这里的问题并不是NULL的确切类型是什么,而是0和NULL都不是指针类型. 在C++98中,主要的启示就是对指针和整型分别进行重载可…
NULL vs nullptr 在过去,我们如果要表示一个指针为空,我们条件反射肯定会这么写: int *p = NULL; 然而啊,有没有想过这是有问题的,比如下面的这段代码: #include <iostream> #include <string> using namespace std; void func(int* num) { cout << "this is the ptr function..." << endl; } v…
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 先让我们看一些概念:字面上的0是一个int,不是一个指针.如果C++发现0在上下文中只能被用作指针,它会勉强把0解释为一个null指针,但这只是一个应变的方案.C++的主要规则还是把0视为int,而不是一个指针. 实际上,NULL也是这样的.NULL的情况,在细节方面有一些不确定性,因为C++标准允许它的实现不管是不是int只需要给出一个数值类型(比如,long)…
某些时候,我们需要将指针赋值为空指针,以防止野指针.   有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;. 也有人直接使用0值作为空指针常量,例如:int* p = 0;.   前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强. 后者可能觉得:NULL并不是C/C++语言的关键字,而是一个在标准库头文件<stddef.h>中定义的宏,因此要使用NULL,可能需要直接或简介地包含<stddef.h>头文件,比较麻烦.   问题一:NULL与常数…
1.概念 用字面值常量nullptr来初始化或赋值来得到空指针 2.c++11之前使用NULL或0 1)NULL是一个宏定义(预处理变量),定义在cstdlib中,其值就是0:对于预处理变量,预处理器会在编译之前的预处理阶段自动将它替换为实际值.所以c++中int* p=NULL等同于把指针p的值置为0 2)c语言中NULL是(void *)0的宏定义,但是c++不能将(void*)转化为任意类型的指针…
C++中 0 与 NULL 与 nullptr之间的关系,nullptr_t 的实现 来源 http://blog.csdn.net/Virtual_Func/article/details/49756913 参考了网上各种资料,理清楚了 0 与 NULL 以及 nullptr 的关系. 1. 从本质上  1) 0是int型的字面值常量  2) NULL 是预处理变量,定义在 cstdlib 中,其值是0  3) nullptr 是 nullptr_t 类型的字面值. 2. cstdlib 中…
原文链接:http://blog.csdn.net/xiejingfa/article/details/50478512 熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”: 如下: int *p1 = NULL; // 需要引入cs…
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) 1.2 NULL在C++中的定义 #define NULL 0 1.3 在C++中 void Func…
一个错误排查两天,std::string赋初值时最好为"", 如果赋初值为nullptr,因为std::string不能和nullptr作比较,所以后面用的时候会引起崩溃. 佩服我这脑子...因为派生类莫名的析构一直定位问题,最后定位到构造函数,哈哈哈哈哈哈哈哈…
来源: https://blog.csdn.net/u010558281/article/details/77793644 字面意义上的解释: 0:整型常量 NULL:预处理符号 nullptr:空指针类型常量 其中前两者在C中出现,最后一个在C++11中出现.我们平常会使用这三个符号来表示空指针,但是他们之间还是有许多差别. NULL 声明在cstdlib中: #ifdef __cplusplus #define NULL 0 #else= #define NULL ((void *)0) #…
某些时候,我们需要将指针赋值为空指针,以防止野指针.   有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;. 也有人直接使用0值作为空指针常量,例如:int* p = 0;.   前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强. 后者可能觉得:NULL并不是C/C++语言的关键字,而是一个在标准库头文件<stddef.h>中定义的宏,因此要使用NULL,可能需要直接或简介地包含<stddef.h>头文件,比较麻烦.   问题一:NULL与常数…
以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题.关键字nullptr是std::nullptr_t类型的值,用来指代空指针.nullptr和任何指针类型以及类成员指针类型的空值之间可以发生隐式类型转换,同样也可以隐式转换为bool型(取值为false).但是不存在到整形的隐式类型转换. #include<iostream> using namespace std; int main() { int *p1 = NULL; int *p2 = nullptr;…
熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”: 如下: int *p1 = NULL; // 需要引入cstdlib头文件 ; int *p3 = nullptr; 新标准中建议使用nullptr代替NULL来声明空指针.到这里…
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/C++杂记:NULL与0的区别.nullptr的来历 某些时候,我们需要将指针赋值为空指针,以防止野指针.   有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;. 也有人直接使用0值作为空指针常量,例如:int* p = 0;.   前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强. 后者可能觉得:NULL并不是C/C++语言的关键字,而是一个在标准库头文件<stddef.h>中定义的宏,因此要使用NULL,可能需要直接或简介地包含<std…
[C++11空指针] 1.NULL的问题 class Test { public: void TestWork(int index) { std::cout << "TestWork 1" << std::endl; } void TestWork(int * index) { std::cout << "TestWork 2" << std::endl; } }; int main() { Test test; te…
NULL VS nullptr…