在C ++中返回局部变量

凯文

我遇到C ++问题(或缺少C ++问题),因为此代码有效,但我不知道为什么。

对于上下文,我的教授给了我们一个头文件和一个主要功能,该程序生成一个Fibonnaci序列。

我正在使用迭代器使用++ a和a ++来迭代序列。

这是我对a ++的实现。

FibonacciIterator FibonacciIterator::operator++(int) //i++, increment i, return old i.
{
    FibonacciIterator old = *this; //create old object to return

    //increment actual fibonacci sequence
    long nextTemp = fCurrent + fPrevious;
    fPrevious = fCurrent;
    fCurrent = nextTemp;

    fCurrentN++;  //increment count
    return old;
}

现在,我通过使用指针“ this”的取消引用运算符来创建值“ old”。我对当前的迭代器执行一些逻辑,然后返回旧的迭代器。

所有这些都有效,并使用以下do-while循环:

FibonacciIterator lIterator2 = lIterator.begin();
do
{
    cout << *lIterator2++ << endl;
} while (lIterator2 != lIterator2.end());

一切正常。这种do-while循环是由教授编写的,我们无意更改它。

我的问题是,为什么此代码有效?据我了解,当我们在方法中创建局部变量时,该变量被封装在方法堆栈框架中。当我们退出堆栈框架时,如果我们返回在该堆栈框架中创建的局部变量,我们可能会得到我们的值。我们也可能不会。我的理解是,这是因为创建此变量的内存位置现在已被计算机上可能需要该程序的任何程序“抢走”。因此,如果我们获得了所需的价值,那是因为还没有任何东西覆盖它。如果我们不这样做,那是因为某些东西已经覆盖了它。

那么,为什么此代码在100%的时间内有效呢?为什么有时我看不到旧的东西变成垃圾,并以未处理的异常使我的程序崩溃?我唯一的猜测是,由于“ FibonacciIterator”是用户制作的类,因此它是在堆上自动分配的内存,因此我们不会遇到此问题。我唯一的猜测是,此问题仅在使用int,long,double等类型时存在。

但是,我99%确信我的猜测是错误的,并且我想了解这里的情况。我想了解这一点,因为我喜欢C ++,但是我不喜欢不知道为什么某些东西会起作用。

谢谢!

约翰3136

您可以返回一个本地对象-该对象将被复制。您不应该返回指向本地对象的指针。如您正确指出的那样,指针将指向垃圾。

在您的情况下,您有一份副本,这样就可以了(所有警告请注意,副本必须是“安全”的)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#返回局部变量

来自分类Dev

返回局部变量C ++的指针

来自分类Dev

C ++ 11中的静态局部变量?

来自分类Dev

在C#中模拟局部变量

来自分类Dev

我在C中的局部变量?

来自分类Dev

您可以在C ++中返回字符串对象的局部变量吗?

来自分类Dev

函数在C中返回局部变量的地址时为NULL行为

来自分类Dev

C ++:寻找对“返回局部变量的地址...”的更正

来自分类Dev

函数返回c中局部变量的地址

来自分类Dev

传递的局部变量(C ++)

来自分类Dev

C处理局部变量

来自分类Dev

引用局部变量的C ++

来自分类Dev

C++ 局部变量

来自分类Dev

C#Func:在块中访问局部变量

来自分类Dev

如何从C / C ++访问lua脚本中的局部变量或调用局部函数?

来自分类Dev

当不涉及复制/移动时,在C ++ 11/14中按值返回局部变量是否可以导致由rvalue构造返回值?

来自分类Dev

C4172和C4239返回局部变量

来自分类Dev

C返回局部变量和4x4矩阵的错误预期参数

来自分类Dev

C ++未来调用局部变量

来自分类Dev

为什么局部变量没有默认类型而全局变量在C中呢?

来自分类Dev

如何引用与C ++中的局部变量同名的全局变量?

来自分类Dev

如果在编译期间不知道局部变量const的值,则可以在C ++中声明局部变量const的好处

来自分类Dev

递归函数中返回的局部变量

来自分类Dev

如何在C中的另一个函数中使用局部变量的值

来自分类Dev

为什么分配给堆栈中的局部变量的内存比C ++所需的内存多?

来自分类Dev

局部变量和函数在C中可以使用相同的名称吗?

来自分类Dev

在Frama-C中为局部变量分配子句

来自分类Dev

常量局部变量数组在哪里存储到“ C”程序中

来自分类Dev

在C ++ 11中,局部变量的最后一次出现是否被视为右值?

Related 相关文章

  1. 1

    C#返回局部变量

  2. 2

    返回局部变量C ++的指针

  3. 3

    C ++ 11中的静态局部变量?

  4. 4

    在C#中模拟局部变量

  5. 5

    我在C中的局部变量?

  6. 6

    您可以在C ++中返回字符串对象的局部变量吗?

  7. 7

    函数在C中返回局部变量的地址时为NULL行为

  8. 8

    C ++:寻找对“返回局部变量的地址...”的更正

  9. 9

    函数返回c中局部变量的地址

  10. 10

    传递的局部变量(C ++)

  11. 11

    C处理局部变量

  12. 12

    引用局部变量的C ++

  13. 13

    C++ 局部变量

  14. 14

    C#Func:在块中访问局部变量

  15. 15

    如何从C / C ++访问lua脚本中的局部变量或调用局部函数?

  16. 16

    当不涉及复制/移动时,在C ++ 11/14中按值返回局部变量是否可以导致由rvalue构造返回值?

  17. 17

    C4172和C4239返回局部变量

  18. 18

    C返回局部变量和4x4矩阵的错误预期参数

  19. 19

    C ++未来调用局部变量

  20. 20

    为什么局部变量没有默认类型而全局变量在C中呢?

  21. 21

    如何引用与C ++中的局部变量同名的全局变量?

  22. 22

    如果在编译期间不知道局部变量const的值,则可以在C ++中声明局部变量const的好处

  23. 23

    递归函数中返回的局部变量

  24. 24

    如何在C中的另一个函数中使用局部变量的值

  25. 25

    为什么分配给堆栈中的局部变量的内存比C ++所需的内存多?

  26. 26

    局部变量和函数在C中可以使用相同的名称吗?

  27. 27

    在Frama-C中为局部变量分配子句

  28. 28

    常量局部变量数组在哪里存储到“ C”程序中

  29. 29

    在C ++ 11中,局部变量的最后一次出现是否被视为右值?

热门标签

归档