程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> nullptr和NULL 區別,nullptrNULL區別

nullptr和NULL 區別,nullptrNULL區別

編輯:C++入門知識

nullptr和NULL 區別,nullptrNULL區別


 注:本文內容摘自網絡,准確性有待驗證,現階段僅供學習參考。尊重作品作者成果,原文鏈接 :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)  
#endif 
      在c語言環境下,由於不存在函數重載等問題,直接將NULL定義為一個void*的指針就可以完美的解決一切問題。       但是在c++環境下情況就變得復雜起來, 首先我們不能寫這樣的代碼   FILE* fp = (void*)0;   將void*直接賦值給一個指針是不合法的,編譯器會報錯。 我們只能這樣寫代碼
[cpp]  
FILE* fp = (FILE*)0;  
// or  
FILE* fp = 0;  
  所以在c++下面,NULL就被直接定義為一個整型 0。  在大多數情況下這並不會產生什麼問題,但是萬一有重載或者模板推導的時候,編譯器就無法給出正確結果了。比如下面的情形:
[cpp]  
void call_back_process(CCObject* target, void* data);  
bind(call_back_process, target, NULL);   // error 函數類型是void* ,但是我們綁定的是一個整型 0  
2、 nullptr的應用場景:        如果我們的編譯器是支持nullptr的話,那麼我們應該直接使用nullptr來替代NULL的宏定義。正常使用過程中他們是完全等價的。 3、模擬nullptr的實現:       某些編譯器不支持c++11的新關鍵字nullptr,我們也可以模擬實現一個nullptr
[cpp]  www.2cto.com
const  
class nullptr_t_t  
{  
public:  
    template<class T>           operator T*() const {return 0;}  
    template<class C, class T>  operator T C::*() const { return 0; }  
private:  
    void operator& () const;  
} nullptr_t = {};  
#undef NULL  
#define NULL nullptr_t  

 


NULL與null什不同?

頂樓上。
在沒有提供更多詳細信息之前,就只是大小寫的區別。
看你在哪裡用了,C++?那可只有 null,沒有 NULL,這個 NULL 將會是一個宏定義。Mysql數據庫?NULL 將是顯示使用,而 null 則是內置的一個空值。JS?VBS?……
 

null與""的不同?

在數據是未知數或者無法使用時,大多數的數據庫管理系統將存儲一個叫做Null值的特殊值。不要將它和零(一個合法數值)、零長度串(不含有字符的一種串數據類型)或空格字符混淆起來。SQL-3標准中把一個Null定義為:
“...一個用來指明任何數據值都不存在的一個特殊值...”

SQLServer中有一個空值調用函數:
ISNULL 功能:使用指定的替換值替換 NULL。

語法
ISNULL ( check_expression , replacement_value )

參數
check_expression
將被檢查是否為 NULL的表達式。check_expression 可以是任何類型的。
replacement_value
在 check_expression 為 NULL時將返回的表達式。replacement_value 必須與 check_expresssion 具有相同的類型。

返回類型
返回與 check_expression 相同的類型。

注釋
如果 check_expression 不為 NULL,那麼返回該表達式的值;否則返回 replacement_value。

一個例子:
使用 ISNULL
下面的示例為 titles 表中的所有書選擇書名、類型及價格。如果一個書名的價格是 NULL,那麼在結果集中顯示的價格為 0.00。

SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved