引用变量只有在“引用”的对象存在于内存中时才有效。传递对超出范围变量的引用被认为是未定义的行为。这是您的代码中的错误。请更正。
const unsigned int& list::operator[] (unsigned int pos)const
{
const unsigned int val = 0;
return val; //this is a local variable, whose scope ends here, a reference to this should not be returned
}
这是编译器对您的代码的警告。
warning: reference to local variable ‘val’ returned [enabled by default]
请听编译器警告(尤其是 c/c++ !!),在您的情况下,仅使用按值传递就足够了。
编辑:
如果返回变量被强制为引用类型,并且无法避免,则可以通过将其设为静态来延长局部变量的生命周期,直至程序的整个存在。
const unsigned int& list::operator[] (unsigned int pos)const
{
static const unsigned int val = 0;
return val;
}
变量 val 现在是一个静态局部变量,它的生命周期贯穿整个程序,因此传递对该变量的引用应该没问题,但不推荐编程,因为按值传递就足以满足您的应用程序的需要。