operator = bout side by value by refrence?

时间:2017-01-09 15:34:04

标签: c++

Q是如何对这种算子= 它将起作用:

int t = v [3]; //她的价值回归

v [3] = 8; //她需要通过引用返回(指向V [3] add')

将V是Vector类(在我的情况下是模板类)

 template <class T> 
 T& Vector<T>::operator[](const int Index) const
 {
  if(Index > -1 && Index < this->Size)
  {
    return &this->Array[Index];
  }
else
   {
        cerr <<"VECTOR_INVALID_INDEX"<<endl;
        return NULL;
   }
};

1 个答案:

答案 0 :(得分:0)

此示例中有几个错误。 this已经是一个指针。做&this几乎肯定不是你想要做的。您遇到的另一个问题是您正在返回对T的引用,但this在此上下文中是const。 this->Array[Index]const T,无法绑定到T&。添加一个const并返回const T&。第三,this->Size没有调用方法Size,你忘了括号。第四个问题是对NULL的引用绑定。你将不得不决定另一种方法。指示无法完成操作的常用方法是抛出异常。 std::vector::at从标题stdexcept中抛出std::out_of_range

template <class T>
const T& Vector<T>::operator[](const int Index) const
//^^^ add const here
{
    if (Index > -1 && Index < this->Size())
    //                  Add parentheses ^^ 
    {
        return this->Array[Index];
        //     ^ No need for &
    }
    else
    {
        throw std::out_of_range("VECTOR_INVALID_INDEX");
    }
};

您可能还想添加非const版本,因为示例v[3] = 8;会失败。使用相同的主体定义此方法:

T& Vector<T>::operator[](const int Index);