我不明白为什么下面的代码不起作用,知道吗?

template <class T>
class Matrice
{
public:
...
    typedef typename std::vector<T>::const_iterator const_iterator;
    const_iterator& cend ( )
    {
        return valeurs.cend ( );
    }
...
private:
...
}


这是投诉人的投诉:


  / Users / Aleks / Documents / DS OO / DS OO / Matrice.h:70:16:非常量左值
  对类型'const_iterator'的引用(又名'__wrap_iter')
  无法绑定到'const_iterator'类型的临时文件(也称为
  '__wrap_iter')

最佳答案

valeurs.cendcppreference)将实例返回到const_iterator(即,它声明为const_iterator valeurs.cend())。

编译器需要创建一个temporary object(内存区域)来存储valeurs.cend()返回的值。这段代码无法编译,因为您不能引用一个临时变量,因为后者不会超出函数调用的寿命。

您通常会按值返回一个迭代器:

typedef typename std::vector<T>::const_iterator const_iterator;
const_iterator cend ( )
{
    return valeurs.cend ( );
}


这将确保valeurs.cend()返回的值被复制(或移动,在C ++ 11中,我相信)到其目标对象(如果您将返回的值分配给类型为const_iterator的变量)或在调用Matrice<T>::cend()的另一个临时目录中。有关详细信息,请参见MSDN解释的链接。

08-17 07:37