<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Nullptr</id>
	<title>Nullptr - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Nullptr"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Nullptr&amp;action=history"/>
	<updated>2026-06-27T02:38:15Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Nullptr&amp;diff=2370433&amp;oldid=prev</id>
		<title>imported&gt;Antigng-bot：​bot: fix &#039;CS1 errors: dates&#039;</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Nullptr&amp;diff=2370433&amp;oldid=prev"/>
		<updated>2021-02-23T10:56:17Z</updated>

		<summary type="html">&lt;p&gt;bot: fix &amp;#039;CS1 errors: dates&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lowercase|title=nullptr}}&lt;br /&gt;
{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
|1=zh-cn:引用;zh-tw:參考;&lt;br /&gt;
|2=zh-cn:解引用;zh-tw:反參考;&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox&lt;br /&gt;
|name         = &lt;br /&gt;
|bodystyle    = &lt;br /&gt;
|title        = nullptr&lt;br /&gt;
|titlestyle   = &lt;br /&gt;
|above        = &lt;br /&gt;
|abovestyle   = &lt;br /&gt;
|image        = &lt;br /&gt;
|imagestyle   = &lt;br /&gt;
|caption      = &lt;br /&gt;
|captionstyle = &lt;br /&gt;
|headerstyle  = &lt;br /&gt;
|labelstyle   = &lt;br /&gt;
|datastyle    = &lt;br /&gt;
&lt;br /&gt;
|header1  = 基本資料&lt;br /&gt;
|label1   = &lt;br /&gt;
|data1    = &lt;br /&gt;
|header2  = &lt;br /&gt;
|label2   = 所屬概念&lt;br /&gt;
|data2    = [[空指標]]&lt;br /&gt;
|header3  = &lt;br /&gt;
|label3   = 種類&lt;br /&gt;
|data3    = [[字面常量_(C语言)|字面常數]]&lt;br /&gt;
|header4  = &lt;br /&gt;
|label4   = [[程式語言|語言]]&lt;br /&gt;
|data4    = [[C++]]&lt;br /&gt;
|header5  = 詳細資料&lt;br /&gt;
|label5   = &lt;br /&gt;
|data5    = &lt;br /&gt;
|header6  = &lt;br /&gt;
|label6   = 語法&lt;br /&gt;
|data6    = nullptr&lt;br /&gt;
|header7  = &lt;br /&gt;
|label7   = 型態&lt;br /&gt;
|data7    = std::nullptr_t&lt;br /&gt;
|header8  = &lt;br /&gt;
|label8   = 標頭檔&lt;br /&gt;
|data8    = nullptr.h （C++11之前）&lt;br /&gt;
|header9  = &lt;br /&gt;
|label9   = 首次出現&lt;br /&gt;
|data9    = [[C++11]]&lt;br /&gt;
&lt;br /&gt;
|belowstyle =&lt;br /&gt;
|below = &lt;br /&gt;
}}&lt;br /&gt;
{{C++_Standard_library}} &lt;br /&gt;
{{About|[[C++11]]語言標準的[[保留字|關鍵字]]|null pointer|空指標}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;nullptr&amp;#039;&amp;#039;&amp;#039;是[[C++11]]语言标准用来表示[[空指针]]的[[常量|常量值]]&amp;lt;ref name=&amp;quot;stroustrup.com nullptr&amp;quot;&amp;gt;{{Cite web | title = A name for the null pointer: nullptr | url = http://www.stroustrup.com/N1488-nullptr.pdf | date =2003-09-10| accessdate = 2018-09-09 | website = stroustrup.com | archive-url = https://web.archive.org/web/20170705130851/http://www.stroustrup.com/N1488-nullptr.pdf | archive-date = 2017-07-05 | dead-url = no }}&amp;lt;/ref&amp;gt;，可以指派給任意類型的[[指標_(電腦科學)|指標]]變數&amp;lt;ref name=&amp;quot;Embedded Template Library nullptr&amp;quot;&amp;gt;{{cite web | url = https://www.etlcpp.com/nullptr.html | title = nullptr | publisher = Embedded Template Library | accessdate = 2018-09-09 | archive-url = https://web.archive.org/web/20180909112840/https://www.etlcpp.com/nullptr.html | archive-date = 2018-09-09 | dead-url = no }}&amp;lt;/ref&amp;gt;。部分[[編譯器]]將之視為一個關鍵字，例如[[Visual Studio]]&amp;lt;ref&amp;gt;{{cite web | url = https://msdn.microsoft.com/zh-tw/library/4ex65770.aspx | title = nullptr (C++ Component Extensions) | accessdate = 2018-09-09 | archive-url = https://web.archive.org/web/20180909150420/https://msdn.microsoft.com/zh-tw/library/4ex65770.aspx | archive-date = 2018-09-09 | dead-url = no }}&amp;lt;/ref&amp;gt;，部分使用舊標準的[[C++]]編譯器則未實作需要自行定義&amp;lt;ref name=&amp;quot;Imperfect C++ --- Practical Solutions for Real-Life Programming&amp;quot;/&amp;gt;或引入額外的標頭檔&amp;lt;ref name=&amp;quot;Embedded Template Library nullptr&amp;quot;/&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 定義 ==&lt;br /&gt;
在C语言中，[[空指標]]可以使用&amp;lt;code&amp;gt;(void *)0;&amp;lt;/code&amp;gt;來表示，且標準庫中也是如此定義，但在C++语言中，由于对语法的类型检查更为严格，因而空指针的值就不能表示为&amp;lt;code&amp;gt;(void *)0;&amp;lt;/code&amp;gt;。例如，空指针的值表示为&amp;lt;code&amp;gt;FILE *fp=(void *)0;&amp;lt;/code&amp;gt;编译报错。所以至少自[[C++98]]开始&amp;lt;code&amp;gt;#define NULL 0&amp;lt;/code&amp;gt;。 但这会在函数重载时遇到新的困难。例如&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void foo(char c, void *p);&lt;br /&gt;
void foo(char c, int i);&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    foo(&amp;#039;x&amp;#039;,NULL);//匹配哪个版本的foo()？&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[C++11]]开始，定义了空指针的常值为&amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;，解决了上述函数重载问题。&lt;br /&gt;
&lt;br /&gt;
在没有C++11的nullptr时，可以自己实现一个&amp;lt;ref name=&amp;quot;Imperfect C++ --- Practical Solutions for Real-Life Programming&amp;quot;&amp;gt;《Imperfect C++ --- Practical Solutions for Real-Life Programming》 作者: 威尔逊 译者: 荣耀 / 刘未鹏&lt;br /&gt;
人民邮电出版社 2006年1月 ISBN 9787115136848&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;const class nullptr_t&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    template&amp;lt;class T&amp;gt;&lt;br /&gt;
    inline operator T*() const&lt;br /&gt;
        { return 0; }&lt;br /&gt;
&lt;br /&gt;
    template&amp;lt;class C, class T&amp;gt;&lt;br /&gt;
    inline operator T C::*() const&lt;br /&gt;
        { return 0; }&lt;br /&gt;
 &lt;br /&gt;
private:&lt;br /&gt;
    void operator&amp;amp;() const;&lt;br /&gt;
} nullptr = {};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C++语言标准规定：&amp;lt;ref&amp;gt;《C++14语言标准》4.10.1&amp;lt;/ref&amp;gt; 值0或std::nullptr_t类型的纯右值是空指针常量（null pointer constant）。可以通过空指针转换(null pointer conversion)成为某个类型的空指针值(null pointer value)。&lt;br /&gt;
&lt;br /&gt;
C++语言标准还规定，&amp;lt;ref&amp;gt;《C++14语言标准》5.2.2.7&amp;lt;/ref&amp;gt;在实参个数多于形参个数时（即可变参数个数的函数调用，可用va_arg来访问），多出来的实参如果是std::nullptr_t类型，则转化为(void *)0供函数访问。&lt;br /&gt;
&lt;br /&gt;
std::nullptr_t定义在标准头文件&amp;lt;code&amp;gt;&amp;lt;[[cstddef]]&amp;gt;&amp;lt;/code&amp;gt;中。但实际上在源程序中不包含该头文件仍可以正常使用nullptr_t类型与nullptr对象。&lt;br /&gt;
&lt;br /&gt;
== nullptr_t ==&lt;br /&gt;
nullptr_t是[[字面常量_(C语言)|字面常數]]nullptr的資料型態&amp;lt;ref&amp;gt;{{cite web | title = std::nullptr_t | url = http://www.cplusplus.com/reference/cstddef/nullptr_t/ | publisher = cplusplus.com | access-date = 2018-09-09 | archive-url = https://web.archive.org/web/20180324153608/http://www.cplusplus.com/reference/cstddef/nullptr_t/ | archive-date = 2018-03-24 | dead-url = no }}&amp;lt;/ref&amp;gt;。它是一種特殊的類型，並不是一種指標類型也不是指向任何種變數型態的指標類型。nullptr_t位於std命名空間中，且定義於&amp;lt;cstddef&amp;gt;標頭檔中&amp;lt;ref&amp;gt;{{cite web | title = Null pointers | url = https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzarg/nullpt.htm | publisher = IBM | access-date = 2018-09-09 | archive-url = https://web.archive.org/web/20180909112329/https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzarg/nullpt.htm | archive-date = 2018-09-09 | dead-url = no }}&amp;lt;/ref&amp;gt;。可透過is_null_pointer來檢查物件是否為這種型態&amp;lt;ref&amp;gt;{{cite web | title = std::is_null_pointer | url = http://www.cplusplus.com/reference/type_traits/is_null_pointer/ | publisher = cplusplus.com | access-date = 2018-09-09 | archive-url = https://web.archive.org/web/20180312023615/http://www.cplusplus.com/reference/type_traits/is_null_pointer/ | archive-date = 2018-03-12 | dead-url = no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
*[[空指標]]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Antigng-bot</name></author>
	</entry>
</feed>