nullptr与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…
1. 为什么会有nullptr的出现 目的:nullptr的出现主要是为了替代NULL. 那么,为什么要替代NULL呢? 在NULL的定义中存在会有2种方式,有的编译器会将NULL定义成0,有的编译器会将NULL定义成((void*)0). 那么,这两种定义方式会对c++有什么区别呢? 在c++中不允许( void* )隐式的转成其他类型,在某些编译器把NULL定义成((void*)0)的情况下,当你定义变量去赋值NULL时候,NULL就会变定义为0. 另外,这种问题也会对c++的重载特性造成混…
注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考.尊重作品作者成果,原文链接 :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…
NULL NULL can be defined as any null pointer constant. Thus existing code can retain definitions of NULL as 0 or 0L, but an implementation may also choose to define it as (void*)0. This latter form of definition is convenient on architectures where s…
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针. 实际上来说,对于NULL也是一样.关于NULL还有一些不确定因素,因为其实现允许给NULL一个整型而不必是int(比如说long).这并不常见,但是也无关紧要,因为这里的问题并不是NULL的确切类型是什么,而是0和NULL都不是指针类型. 在C++98中,主要的启示就是对指针和整型分别进行重载可…
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 先让我们看一些概念:字面上的0是一个int,不是一个指针.如果C++发现0在上下文中只能被用作指针,它会勉强把0解释为一个null指针,但这只是一个应变的方案.C++的主要规则还是把0视为int,而不是一个指针. 实际上,NULL也是这样的.NULL的情况,在细节方面有一些不确定性,因为C++标准允许它的实现不管是不是int只需要给出一个数值类型(比如,long)…
问题起源 在使用Qt框架的时候, 经常发现一些构造函数 *parent = 0 这样的代码. 时间长了, 就觉的疑惑了. 一个指针不是等于NULL吗? 这样写, 行得通吗? 自己测试一下就可以了. 测试代码 #include <iostream> using namespace std; int main() { int * npt = 0; if( 0 == npt ){ cout << "npt == 0" << endl; ///< 输出…
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…
原文链接:http://blog.csdn.net/xiejingfa/article/details/50478512 熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”: 如下: int *p1 = NULL; // 需要引入cs…
熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”: 如下: int *p1 = NULL; // 需要引入cstdlib头文件 ; int *p3 = nullptr; 新标准中建议使用nullptr代替NULL来声明空指针.到这里…
一.范围for语句:用于遍历一个序列 ,,,,}; for(auto &x : v) // 省了拷贝的动作,提高了系统效率 { cout << x << endl; } 二.动态内存分配问题 c中,供程序使用的存储空间,有程序区,静态存储区,动态存储区. C++中,我们把内存进一步分为5个区域: (1)栈:一般函数内的局部变量都会放在这里,由编译器自动分配和释放: (2)堆:程序员malloc/new分配,用free/delete来释放.未释放会引起内存泄漏. (3)全局/…
在c++11中,nullptr可完全代替NULL.  然而NULL和nullptr还是稍有不同,NULL可被转化为int类型,而nullptr不能.因此nullptr对NULL在进行模板推导或者函数重载时的缺陷. #include <iostream> void foo(int x) { std::cout << "int" << std::endl; } void foo(int* x) { std::cout << "int…
一. nullptr与nullptr_t (一)nullptr_t是一种数据类型,而nullptr是该类型的一个实例.通常情况下,也可以通过nullptr_t类型创建另一个新的实例. (二)所有定义为nullptr_t类型的数据都是等价的,行为也是完全一致的. (三)std::nullptr_t类型,并不是指针类型,但可以隐式转换成任意一个指针类型(注意不能转换为非指针类型,强转也不行). (四)nullptr_t类型的数据不适用于算术运算表达式.但可以用于关系运算表达式(仅能与nullptr_…
写在前面: 与其说C++中的常量指针和指针常量是一块很有嚼头的语法糖,不如说它是一块相当难啃的骨头.其实本来没什么,这无非是const int *p与int* const p的区别, 但一涉及到起名字,特别是给他们戴上“常量指针”和“指针常量”的中文帽子,由于作者和译者(针对外文书)的不同,就出现了“张冠李戴”和“李冠张戴”的乱像,不知道谁是谁了,弄得人一头雾水,尤其是对于初学者.本文的目的就是针对这一细节,为大家将两者理清楚,同时说明在使用上的区别. 注意:1.const int *p也可写成…
Background C++ is one of the main development languages used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more…
写C++程序的几个陋习:class 名以大写 C 开头,例如 CDate:成员变量以 m_ 开头:变量采用匈牙利命名法:不知道何时禁用 copy-ctor/assign operator.前三个可能是从MFC那里传下来的,当时C++.class.OO是新玩意儿,要与 C struct 区分,现在还这么做就土了.C++的成员变量可用特殊命名格式,加下划线后缀即可(加下划线前缀是错的).但在 Java 里不必模仿 C++ 的这种成员变量命名方式,IDE 可以让成员变量以不同的颜色显示,与局部变量区分…
复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复合类型,首先,它和指针不同的是它并不是一个对象,仅仅只是另一个对象的别名.而且,引用绑定的东西必须是一个对象,引用不是对象,所以定义引用的引用是不合法的. 也不能定义字面量的引用.同时,普通引用的绑定对象与引用定义类型必须相同. 如: ;//错误的,不能定义字面量 double b = 1.22;…
一.动态内存和类 1.静态类成员 (1)静态类成员的特点 无论创建多少对象,程序都只创建一个静态类变量副本.也就是说,类的所有对象都共享同一个静态成员. (2)初始化静态成员变量 1)不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.对于静态成员,可以在类声明之外使用单独的语句来进行初始化,这是因为静态类成员是单独存储的,而不是对象的组成部分.请注意,初始化语句指出了类型,并使用了作用域运算符,但没有使用关键字static. 2)静态类成员初始化是在方法文件中,而…
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w…
原文标题:Ten C++11 Features Every C++ Developer Should Use 原文作者:Marius Bancila 原文地址:codeproject 备注:非直译,带个人感情色彩,有疑惑参看原文. This article discusses a series of features new to C++11 that all developers should learn and use. There are lots of new additions to…
http://blog.csdn.net/solstice/article/details/9923615 近期微吐槽博言论存档,涉及“性能优化”.C++陋习等 写C++程序的几个陋习:class 名以大写 C 开头,例如 CDate:成员变量以 m_ 开头:变量采用匈牙利命名法:不知道何时禁用 copy-ctor/assign operator.前三个可能是从MFC那里传下来的,当时C++.class.OO是新玩意儿,要与 C struct 区分,现在还这么做就土了.C++的成员变量可用特殊命…
转自:http://blog.csdn.net/crayondeng/article/details/18563121 一.Lambda表达式 C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下:               [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}       可以看到,Lambda主要分为五个部分:[函数对象参数].(操作符重载函数参数).mutable…
__func__宏 __func__返回当前的函数名,也可以返回class和struct名. /*返回函数名hello*/ const char* hello() { return __func__; } /*返回结构体名foo*/ struct foo { foo():name(__func){} const char* name; } __VA_ARGS__宏 可变参数宏 #define INFO(...) printf(__VA_ARGS) noexcept noexcept操作会阻止异常…
*: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…
转 http://www.cnblogs.com/chen3feng/p/5972967.html?from=timeline&isappinstalled=0&lwfrom=user_dingfriend Google C++ Style Guide在C++11普及后的变化 一般比较规范的项目都有一个代码规范,Google C++ Style Guide(以下简称GCSG)是比较流行的C++代码规范,为什么我会分析它?因为我们现在就在用. C++代码规范一般有两个方向,一个方向是很保守,…
v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成     头文件        #define用法        前向声明        内联函数        -inl.h文件        函数参数顺序        include的命名和顺序    作用域        命名空间            未命名空间            命名空间       …
Declaration of variables   C++ is a strongly-typed language, and requires every variable to be declared with its type before its first use. This informs the compiler the size to reserve in memory for the variable and how to interpret its value. The s…
由于之前一直在看directx11龙书学习,因此sdk一直用的Microsoft DirectX SDK (June 2010) 版本,最近在stackoverflow上问dx11相关问题时,一直被大神吐槽为何还用已经废弃的directx sdk,由于directx sdk现在已经和windows sdk合并到一起了,只能去下windows sdk了.为了方便索性直接换了vs 2015社区版,里面自带了(windows sdk),既然sdk换了最新的,effect框架也要换最新的啊(Effect…
.断言是将一个须要为真的表达式放在语句中,在debug模式下检查一些逻辑错误的參数.C++中使用assert须要使用<assert.h>或者<cassert>头文件.有函数定义例如以下: void fun(int a[],int n) { assert(n>0); //dosomething; } 这样就能够检查n<=0的情况.假设遇到这样的情况,程序会调用abort()函数而终止. C++11提供了static_assert断言,它的函数原型接受两个參数,一个是断言表…
显示效果如图: 环境:win7 64.VS2013 代码如下: #include <atlbase.h> #include <atlhost.h> // 导入 #import "TestCtrl.tlb" // 定义全局对象 HWND hMainWnd; CComModule _module; // COM服务器模块 CAxWindow _ctrl; // ActiveX控件的容器 int APIENTRY _tWinMain(_In_ HINSTANCE hI…