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

时间:2011-01-08 05:29:53

标签: c++

我知道Class * cls是一个指针,Class& cls获取地址,但是什么是

void fucction1( Class *&cls)

如果我有Class c,我应该将哪些内容传递给function1()

谢谢!

4 个答案:

答案 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)

对于类型TT*是指向T类型对象的指针,因此Class*是指向Class对象的指针。

对于类型TT&是对类型为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传递。