C++ 在c+中处理参考变量+;
好的,我已经在网上查看了一下,很明显我的问题是,我在这里使用了一个变量“val”,当函数关闭时它就停止存在了。不幸的是,我在这里还没有找到任何实际的解决办法。我相信这是一个很容易的问题,一旦你知道如何解决,但我只是没有知识 在这段代码中,请注意我试图返回一个无符号的int-val。我不能这样做,因为代码需要一个引用,而不仅仅是一个变量。我不能简单地返回val,但我不知道该怎么做 谢谢你的帮助C++ 在c+中处理参考变量+;,c++,variables,reference,local,C++,Variables,Reference,Local,好的,我已经在网上查看了一下,很明显我的问题是,我在这里使用了一个变量“val”,当函数关闭时它就停止存在了。不幸的是,我在这里还没有找到任何实际的解决办法。我相信这是一个很容易的问题,一旦你知道如何解决,但我只是没有知识 在这段代码中,请注意我试图返回一个无符号的int-val。我不能这样做,因为代码需要一个引用,而不仅仅是一个变量。我不能简单地返回val,但我不知道该怎么做 谢谢你的帮助 编辑:对不起,我在图片上遇到了一些问题,显然我需要处理我的代表。我要大胆猜测一下 Foo& d
编辑:对不起,我在图片上遇到了一些问题,显然我需要处理我的代表。我要大胆猜测一下
Foo& doStuff()
{
// blah blah
Foo val;
// ...
return val;
// val is no longer valid end of scope. Returning invalid reference.
}
要么将结果Foo
实例传递给doStuff,要么在堆上创建一个new
Foo并作为指针返回
所以
或
当然,您可以按值返回:
Foo doStuff()
{
// blah blah
Foo val;
// ...
return val;
}
取决于食物的重量。当然,因为在本例中,
Foo
只是一个小的int
,只需按值返回即可。对于大型/非普通类型按值返回的某些情况,会创建一个临时副本(在没有通过RVO或NRVO进行复制省略的情况下);在这些情况下,您可能希望避免按值返回大型对象类型。我将做一个粗略的猜测
Foo& doStuff()
{
// blah blah
Foo val;
// ...
return val;
// val is no longer valid end of scope. Returning invalid reference.
}
要么将结果Foo
实例传递给doStuff,要么在堆上创建一个new
Foo并作为指针返回
所以
或
当然,您可以按值返回:
Foo doStuff()
{
// blah blah
Foo val;
// ...
return val;
}
取决于食物的重量。当然,因为在本例中,
Foo
只是一个小的int
,只需按值返回即可。对于大型/非普通类型按值返回的某些情况,会创建一个临时副本(在没有通过RVO或NRVO进行复制省略的情况下);在这些情况下,您可能希望避免按值返回大型对象类型。我将做一个粗略的猜测
Foo& doStuff()
{
// blah blah
Foo val;
// ...
return val;
// val is no longer valid end of scope. Returning invalid reference.
}
要么将结果Foo
实例传递给doStuff,要么在堆上创建一个new
Foo并作为指针返回
所以
或
当然,您可以按值返回:
Foo doStuff()
{
// blah blah
Foo val;
// ...
return val;
}
取决于食物的重量。当然,因为在本例中,
Foo
只是一个小的int
,只需按值返回即可。对于大型/非普通类型按值返回的某些情况,会创建一个临时副本(在没有通过RVO或NRVO进行复制省略的情况下);在这些情况下,您可能希望避免按值返回大型对象类型。我将做一个粗略的猜测
Foo& doStuff()
{
// blah blah
Foo val;
// ...
return val;
// val is no longer valid end of scope. Returning invalid reference.
}
要么将结果Foo
实例传递给doStuff,要么在堆上创建一个new
Foo并作为指针返回
所以
或
当然,您可以按值返回:
Foo doStuff()
{
// blah blah
Foo val;
// ...
return val;
}
取决于食物的重量。当然,因为在本例中,
Foo
只是一个小的int
,只需按值返回即可。对于大型/非普通类型按值返回的某些情况,会创建一个临时副本(在没有通过RVO或NRVO进行复制省略的情况下);在这些情况下,您可能希望避免按值返回大型对象类型。此代码除了在图像中给出外,还有很多问题(!!!)
我猜你是想在列表中找到位置pos-1
的元素,或者别的什么。引用您的问题的主要问题似乎是,您首先按值分配val
,然后您没有要返回的引用。您应该直接返回n2->value
,它应该是对unsigned int
的引用,如下所示:
const unsigned int &list::operator[](unsigned int pos) const
{
node *n1 = ???, *n2 = ???;
for (unsigned int k = 0; k < _size; k++)
{
if (k == pos)
return n2->value;
n1 = n2->next;
n2 = n1;
}
return ???;
}
const unsigned int&list::operator[](unsigned int pos)const
{
节点*n1=?,*n2=???;
for(无符号整数k=0;k<\u size;k++)
{
如果(k==pos)
返回n2->value;
n1=n2->next;
n2=n1;
}
返回???;
}
其他问题仍然存在,例如:
- 为什么需要两个
而不是一个(直接查找位置节点*
)pos-1
- 如何初始化
(以某种方式指向列表的开头;显然n1,n2
不起作用)new node()
- 如果输入参数
超出范围,则返回什么(可能返回对可以检测到的某个静态变量的引用,或引发异常)pos
对于这些问题,您需要更多的上下文。除了在图像中给出之外,此代码还有很多问题(!!!) 我猜你是想在列表中找到位置
pos-1
的元素,或者别的什么。引用您的问题的主要问题似乎是,您首先按值分配val
,然后您没有要返回的引用。您应该直接返回n2->value
,它应该是对unsigned int
的引用,如下所示:
const unsigned int &list::operator[](unsigned int pos) const
{
node *n1 = ???, *n2 = ???;
for (unsigned int k = 0; k < _size; k++)
{
if (k == pos)
return n2->value;
n1 = n2->next;
n2 = n1;
}
return ???;
}
const unsigned int&list::operator[](unsigned int pos)const
{
节点*n1=?,*n2=???;
for(无符号整数k=0;k<\u size;k++)
{
如果(k==pos)
返回n2->value;
n1=n2->next;
n2=n1;
}
返回???;
}
其他问题仍然存在,例如:
- 为什么需要两个
而不是一个(直接查找位置节点*
)pos-1
- 如何初始化
(以某种方式指向列表的开头;显然n1,n2
不起作用)new node()
- 如果输入参数
超出范围,则返回什么(可能返回对可以检测到的某个静态变量的引用,或引发异常)pos
对于这些问题,您需要更多的上下文。此代码除了给出