C++ 为什么向量<;int>;const ref返回的变量不';行不通

C++ 为什么向量<;int>;const ref返回的变量不';行不通,c++,vector,constants,ref,C++,Vector,Constants,Ref,以下是我的功能: const vector<int>& getVInt(){ vector<int> vint; (...) return vint; } const vector&getVInt(){ 向量vint; (...) 返回葡萄酒; } 以及 向量x=getVInt(); 返回: 在抛出的实例后调用terminate 'std::out_of_range'what():vector::_M_range\u check 和 const

以下是我的功能:

const vector<int>& getVInt(){
  vector<int> vint;
  (...)
  return vint;
}
const vector&getVInt(){
向量vint;
(...)
返回葡萄酒;
}
以及

向量x=getVInt(); 返回:

在抛出的实例后调用terminate 'std::out_of_range'
what():vector::_M_range\u check


const vector<int>& x = getVInt();
常量向量&x=getVInt(); 不返回任何内容(大小不同于0但在使用x.at(I)时没有值的向量)

我在论坛上找过,但关于temprory和constref的答案并不能帮助我理解这一点


多谢各位

您正在返回对本地对象的引用。这是未定义的行为。以副本的形式返回,由于使用了,副本将被删除

std::vector getVInt(){
std::向量vint;
// …
返回葡萄酒;
}

您正在返回对本地对象的引用。这是未定义的行为。以副本的形式返回,由于使用了,副本将被删除

std::vector getVInt(){
std::向量vint;
// …
返回葡萄酒;
}

什么是
EntitiesID
?这是一个错误,它是vint。编译器应该发出的警告是否没有提示问题?(clang 3.4:
引用与局部变量“vint”关联的堆栈内存返回)
什么是
EntitiesId
?这是一个错误,它是vint。编译器应该发出的警告是否没有提示问题?(clang 3.4:
引用与局部变量“vint”关联的堆栈内存返回)
是,但我使用了const。@FarorTahal,没关系。退出函数后,对象就不存在了。持有对死对象的常量引用并不重要。@farotarhal如果按值返回,绑定到
const
引用将延长返回对象的生存期。但是你不能按值返回。@FaroTahal,只需按值返回并复制一份即可。这是最简单、最有效的方法。juanchopanza所指的是,临时绑定到引用(包括
常量
和非
常量
)将延长对象的生命周期。在这种特定情况下,它变化不大,而且我认为它的值更干净。是的,但我使用了const。@FarorTahal,没关系。退出函数后,对象就消失了。持有对死对象的常量引用并不重要。@farotarhal如果按值返回,绑定到
const
引用将延长返回对象的生存期。但是你不能按值返回。@FaroTahal,只需按值返回并复制一份即可。这是最简单、最有效的方法。juanchopanza所指的是,临时绑定到引用(包括
常量
和非
常量
)将延长对象的生命周期。在这种特殊情况下,它没有太大变化,我认为它的价值更干净。
const vector<int>& x = getVInt();
std::vector<int> getVInt(){
    std::vector<int> vint;
    // …
    return vint;
}