【问题标题】:What does "Class* &cls" mean in C++'s function definition?C++ 函数定义中的“Class* &cls”是什么意思?
【发布时间】:2011-01-08 05:29:52
【问题描述】:

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

void fucction1( Class *&cls)

如果我有Class c,我应该将什么传递给function1()

谢谢!

【问题讨论】:

    标签: c++


    【解决方案1】:

    此外,Jameshis 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
    

    【讨论】:

      【解决方案2】:

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

      对于T 类型,T& 是对T 类型对象的引用,因此将它们放在一起,Class*& 是对指向Class 对象的指针的引用。

      【讨论】:

        【解决方案3】:
        Class c;
        Class* c_ptr = &c;
        function1(c_ptr);
        

        会工作的。但请注意,右值引用仅适用于大多数编译器尚未完全实现的 C++0x。因此以下方法不起作用:

        Class c;
        function1(&c);
        

        【讨论】:

          【解决方案4】:

          如前所述,对指向 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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多