-
类型差异
-
NULL
和0
#include <iostream> template <typename T> void show( T&& a) { a.error(); }int main () { show(NULL); }
-
输出
D:\codes\cfile\Test\test.cpp: In instantiation of 'void show(T&&) [with T = long long int]': D:\codes\cfile\Test\test.cpp:8:14: required from here D:\codes\cfile\Test\test.cpp:4:7: error: request for member 'error' in 'a', which is of non-class type 'long long int'a.error();~~^~~~~ [Finished in 328ms]
-
这里
NULL
是long long int
类型. -
不同编译器实现不同.
-
-
问题
-
NULL
和0
都是内置类型,当出现同时重载指针和内置类型时. 会出现错误匹配或者二义性.
-
-
错误匹配
#include <iostream>void show(long long int) { std::cout << __LINE__ << std::endl; }void show(void *) { std::cout << __LINE__ << std::endl; }int main () { show(NULL); }
-
二义性
#include <iostream>void show(bool) { std::cout << __LINE__ << std::endl; }void show(void *) { std::cout << __LINE__ << std::endl; }int main () { show(NULL); }
-
小结
-
nullptr
是关键字.不需要include
-
nullptr
有自己的类型,不会和普通类型出现二义性. -
nullptr
可以转化为任意类型的指针. -
nullptr
有编译器支持,C++11
新特性.
-
-
-
好处
-
可读性
#include <iostream>void* show() { return nullptr; }int main () { auto s = show();if (0 != s) { }if (NULL != s) { }if (nullptr != s) { } }
-
nullptr
是后面的主流. -
NULL
和nullptr
一起有点混. -
0
都不知道返回的是什么类型.
-
-
-
模板
-
分析
-
前面介绍了
NULL,0
当作空指针,间接隐式转换还可以,但是通过模板就会变回原形. -
变回原型就不匹配,会出现警告之类的.
-
-
隐式匹配
#include <iostream>void show(void*) { }int main () { show(0);show(NULL); }
-
关键是还不能出现自身类型的重载,出现了就可能出错.
-
-
模板现原形
#include <iostream> void cool(void*) { } template <typename T> void show(T&&a) { cool(a); }int main () { show(nullptr);// show(0);// show(NULL); }
-
直接报错.
-
-
-
总结
-
内置类型方便,安全.
-
兼容性强.不推荐使用
NULL,0
;
-
详细解决方案
c++11 推荐 nullptr 而不是 NULL
热度:9 发布时间:2023-12-22 02:46:59.0
相关解决方案
- struts2 对象属性流入不进去, 报错:target is null for setProperty(null, "x" [Ljava.lang.Stri
- SSH有关问题,There is no Action 地图ped for action name null
- !使用JDNI时,报 Cannot create JDBC driver of class '' for connect URL 'null'
- java.sql.SQLException: The url cannot be null 谋求帮助
- null id in com.bsw.gms.hibernate.pojo.Score entry (don't flush the Session after an exception occurs,该怎么解决
- 急紧急十分紧急JSP,「focus="<%= JspUtil.getFirstProperty(request, null) %>」哪位高手给解释上这句话的作用?一有答案立即结帖
- ognl.OgnlException: target is null for setProperty,该怎么解决
- 关于异常:attempt to create delete event with null entity
- log4j:ERROR setFile(null,false) call failed.解决方法
- 'null' 为空或不是对象?该怎么处理
- org.hibernate.PropertyAccessException: Null value was assigned to a property of解决办法
- org.apache.jasper.JasperException: java.lang.NumberFormatException: null,该怎么解决
- null == a 跟 a == null 的区别
- org.apache.jasper.JasperException: java.lang.NumberFormatException: null,该如何解决
- poi生成excel表中显示"null"的格子如何修改成显示空白
- GetStringUTFChars(env,str,NULL)返回值的操作有关问题
- SSH做添加的过程中出现了错误javax.servlet.ServletException: not-null property references a nu
- null!= xxx 跟 xxx!=null有什么区别
- null 跟 “” 有什么区别
- 下传组件老说PostedFile = null
- 行15: 没法获取属性“appendChild”的值: 对象为 null 或未定义
- cid = (string.IsNullOrEmpty(typeId) ? null : ( Convert.ToInt32( typeId)) ) 有解决方案
- 存储过程调用 is not null 判断不成功解决思路
- MVC3.0 Model主外键关联有关问题 设置foreignkey后取不到数据,null
- 外网,访问数据库揭示 用户'(null)' 登录失败。原因: 未与信任 SQL Server 连接相关联
- 异常: 无法获取属性“innerHTML”的值: 对象为 null 或未定义,这个如何解决,代码如上
- 类型“string”必须是不可为 null 的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”解决办法
- select * from authors where au_id is not null 存储过程怎么写
- Cache.Insert(key,key,null,DateTime.MaxValue,TimeSpan.Zero,NotRemovable,null),有2个参数不太懂解决办法
- 未能从程序集“qdgl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载门类“qdgl.DAL.DAL_Commodity”