Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量分配问题 #包括“iostream” #包括“向量” 使用名称空间std; 常量向量&Getv() { 向量w(10); w[0]=10; cout_C++_Vector - Fatal编程技术网

C++ 向量分配问题 #包括“iostream” #包括“向量” 使用名称空间std; 常量向量&Getv() { 向量w(10); w[0]=10; cout

C++ 向量分配问题 #包括“iostream” #包括“向量” 使用名称空间std; 常量向量&Getv() { 向量w(10); w[0]=10; cout,c++,vector,C++,Vector,您正在返回对局部变量的引用。当您退出该函数时,它将被销毁 您需要返回一份副本: #include "iostream" #include "vector" using namespace std; const vector<int>& Getv() { vector<int> w(10); w[0]=10; cout<<w.size()<<endl; return w; } //Now when I write in main: vec

您正在返回对局部变量的引用。当您退出该函数时,它将被销毁

您需要返回一份副本:

#include "iostream"
#include "vector"
using namespace std;

const vector<int>& Getv() 
{
vector<int> w(10);
w[0]=10;
cout<<w.size()<<endl;
return w;
}
//Now when I write in main:
vector<int>v = Getv();//Throws exception
//and the below rows has no effect
vector<int>v;
v=Getv()//w does not change

您还应该在include上使用
,因为它们是标准库的一部分。

似乎您混淆了返回参数和输入参数。 通过常量引用传递参数是安全的:

const vector<int>& Getv() 
{
  static vector<int> w(10);
  w[0]=10;
  cout<<w.size()<<endl;
  return w;
}
void fun(常量向量和arg1)
{
//某物
}
在那个示例中,您只传递引用,所以不会调用复制构造函数

但从函数返回引用值(const或not const)是危险的。 见上面布鲁斯的答案。 您还可以延长引用生存期:

void fun(const vector<int>& arg1)
{
    //something
}
const vector&Getv()
{
向量w(10);
w[0]=10;

非常感谢,但是为什么我必须在这里写static,如果我返回一个Student&例如,我不必写它。我的意思是假设我返回的是Student&而不是vector?静态变量不存储在堆栈中,因此在函数结束时它们不会被销毁。那么,返回引用是合法的。如果你返回的是Student&你的学生对象不是静态的,这是未定义的行为。请原谅我,但你所说的未定义的行为是什么意思。你的意思是它是正确的,但我不能这样做。实际上我无法想象它是如何工作的,因为在函数结束时,它在逻辑上会被销毁。但是当我返回学生时,它工作了。非常感谢你……你走吧幸运的是,未定义的行为意味着它可以按您希望的方式工作,但情况并非总是如此。Hani,仅仅因为它这次在您的计算机上运行并不意味着它是正确的。您不能返回对本地堆栈分配对象的引用,因为当函数结束时,它将消失。静态变量位于func之间电话。
void fun(const vector<int>& arg1)
{
    //something
}
const vector<int>& Getv() 
{
    vector<int> w(10);
    w[0]=10;
    cout<<w.size()<<endl;
    return w;
}

const vector<int>& v = Getv(); //now all ok
vector<int> Getv() 
{
   vector<int> w(10);
   w[0]=10;
   cout<<w.size()<<endl;
   return w;
}

vector<int>v = Getv();