[英]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
對於類型T
, T*
是指向類型為T
的對象的指針,因此Class*
是指向Class
對象的指針。
對於類型T
, T&
是對類型為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.