【发布时间】:2011-01-08 05:29:52
【问题描述】:
我知道 Class *cls 是一个指针,Class &cls 取地址,但是什么是
void fucction1( Class *&cls)
如果我有Class c,我应该将什么传递给function1()?
谢谢!
【问题讨论】:
标签: c++
我知道 Class *cls 是一个指针,Class &cls 取地址,但是什么是
void fucction1( Class *&cls)
如果我有Class c,我应该将什么传递给function1()?
谢谢!
【问题讨论】:
标签: c++
此外,James 在his response 中解释了什么,让我再补充一点。
虽然您可以编写仅在 C++ 中完全有效的 Class* &(引用指针),但您不能编写 Class& *(引用指针),因为您不能 strong> 有指向任何类型的引用的指针。在 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);
会工作的。但请注意,右值引用仅适用于大多数编译器尚未完全实现的 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。
【讨论】: