我知道Class * cls是一个指针,Class& cls获取地址,但是什么是
void fucction1( Class *&cls)
如果我有Class c
,我应该将哪些内容传递给function1()
?
谢谢!
答案 0 :(得分:8)
此外,James中解释了his response中解释的内容,让我再补充一点。
虽然您可以编写仅在C ++中完全有效的Class* &
(对指针的引用),但您不能编写Class& *
(指向引用的指针),因为不能 指向任何类型的引用的指针。在C ++中,指向引用的指针是非法的。
§8.3.2/ 4来自语言规范,
不得提及 引用,没有引用数组, 并且没有指向参考的指针。
如果我有C级,我应该通过什么 to 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
答案 1 :(得分:7)
对于类型T
,T*
是指向T
类型对象的指针,因此Class*
是指向Class
对象的指针。
对于类型T
,T&
是对类型为T
的对象的引用,因此将它们放在一起,Class*&
是对指向{的指针的引用{1}}对象。
答案 2 :(得分:0)
Class c;
Class* c_ptr = &c;
function1(c_ptr);
会工作吗?但请注意,rvalue-references仅适用于C ++ 0x,而大多数编译器尚未完全实现它们。因此,以下方法不起作用:
Class c;
function1(&c);
答案 3 :(得分:0)
如上所述,对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
传递。