[英]What do default values of pointers in constructors mean?
我試着理解這段代碼(從這里開始 ):
template <class T> class auto_ptr
{
T* ptr;
public:
explicit auto_ptr(T* p = 0) : ptr(p) {}
~auto_ptr() {delete ptr;}
T& operator*() {return *ptr;}
T* operator->() {return ptr;}
// ...
};
我有理解這行代碼的問題: explicit auto_ptr(T* p = 0) : ptr(p) {}
。
據我所知,通過這一行,我們嘗試定義一個構造函數,該構造函數具有一個pointer-to-object-of-T-class
類型的pointer-to-object-of-T-class
參數。 然后我們有= 0
。 那是什么? 它是默認值嗎? 但是0
如何可以是指針的默認值(指針應該將地址作為值,而不是整數)。
是, = 0
是默認值。 對於指針參數,它與= NULL
相同。
引用Stroustrup :
我應該使用
NULL
還是0
?在C ++中,
NULL
的定義是0
,因此只有美學差異。 我更喜歡避免使用宏,所以我使用0
。NULL
另一個問題是人們有時會錯誤地認為它與0
不同和/或不是整數。 在預標准代碼中,NULL
有時被定義為不適合的東西,因此必須/必須避免。 這些日子不太常見。如果必須命名空指針,則將其命名為
nullptr
; 這就是它在C ++ 11中所稱的內容。 然后,nullptr
將是一個關鍵字。
空指針常量的正式定義如下(強調我的):
4.10指針轉換[conv.ptr]
1 空指針常量是整數類型的整數常量表達式(5.19)prvalue,其計算結果為零或類型為std :: nullptr_t的prvalue。 空指針常量可以轉換為指針類型; 結果是該類型的空指針值,並且可以與指向對象的指針或指向函數類型的指針的每個其他值區分開來。 這種轉換稱為空指針轉換。
NULL
被定義為一個這樣的常量:
18.2類型[support.types]
3宏
NULL
是本國際標准(4.10)中一個實現定義的C ++空指針常量。 192192)可能的定義包括
0
和0L
,但不包括(void*)0
。
explicit auto_ptr(T* p = 0) : ptr(p) {}
這是auto_ptr
的構造函數,它采用T* p
,如果用戶沒有提供指針,將使用= 0
。 構造函數將成員ptr
設置為參數: ptr(p)
並且不執行任何其他操作{}
。 此構造函數不能在explicit
式的隱式構造中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.