簡體   English   中英

“Class *&cls”在C ++的函數定義中意味着什么?

[英]What does “Class* &cls” mean in C++'s function definition?

我知道Class * cls是一個指針,而Class&cls是地址,但是是什么

void fucction1( Class *&cls)

如果我有Class c ,我應該傳遞給function1()

謝謝!

此外, 詹姆斯回答中解釋說,讓我再補充一點。

雖然您可以編寫僅在C ++中完全有效的Class* &引用指針 ),但您不能編寫Class& * (指向引用的指針),因為您不能 指向任何類型的引用 在C ++中,指向引用的指針是非法的。

§8.3.2/ 4來自語言規范,

不應引用引用,不引用引用數組,也不引用引用指針


如果我有C類,我應該傳遞給function1()?

您可以像這樣編寫您的調用代碼:

Class *ptrClass;

//your code; may be you want to initialize ptrClass;

function1(ptrClass);

//if you change the value of the pointer (i.e ptrClass) in function1(),
//that value will be reflected here!
//your code

對於類型TT*是指向類型為T的對象的指針,因此Class*是指向Class對象的指針。

對於類型TT&是對類型為T的對象的引用,因此將它們放在一起, Class*&是對指向Class對象的指針的引用。

Class c;
Class* c_ptr = &c;
function1(c_ptr);

會工作。 但請注意,rvalue-references僅適用於C ++ 0x,而大多數編譯器尚未完全實現它們。 因此以下不起作用:

Class c;
function1(&c);

如上所述,對Class的指針的引用。

  • 你將Class *傳遞給函數
  • 該函數可以將指針更改為不同的指針

這是一個相當不常見的界面, 您需要更多細節來了解預期的指針,以及您必須對它們執行的操作。

兩個例子:

迭代

bool GetNext(Classs *& class)
{
   if (class == 0)  
   {
     class = someList.GetFirstObject();
     return true;
   }

   class = somePool.GetObjectAbove(class); // get next
   return class != 0;       
}

// Use for oterating through items:
Class * value = 0;
while (GetNext(value))
   Handle(value);

完全不同的東西

void function (Class *& obj)
{
    if (IsFullMoon())
    {
      delete obj;
      obj = new Class(GetMoonPos());
    }
}

在這種情況下,您傳遞的指針必須是新分配的,並且您收到的指針需要再次傳遞給function ,或者被您delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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