簡體   English   中英

構造函數中指針的默認值是什么意思?

[英]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 ++空指針常量。 192

192)可能的定義包括00L ,但不包括(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM