C++ compiler warning - returning local variable

前端 未结 3 1926
你的背包
你的背包 2020-12-09 17:40

I\'m simply trying to overload a + operator and I\'m getting this compiler warning

reference to local variable \'tmp\' returned

Here is the

相关标签:
3条回答
  • 2020-12-09 18:00

    You can't return a reference to a local variable. Inside the operator+() function, you're creating a local variable called tmp. It will get destroyed as soon as the function exits. You can't return a reference to that variable, because it no longer exists when the calling function gets the return value.

    Change your definition of the function to:

    const Int operator+(const Int&) const;
    

    It would build without warnings and work fine too.

    0 讨论(0)
  • 2020-12-09 18:02

    What you try to do is to return a reference to a memory location that will be invalid the moment you return it.

    The variable tmp will disappear when it goes out of scope (that is, when operator+ is finished).

    Because your return type is Int&, not the value of tmp is returned at "return tmp" but a reference to tmp. This is not correct because tmp will not exist anymore after the method is finished!!

    Solution: Do not return as reference, but as Int

    0 讨论(0)
  • 2020-12-09 18:11

    tmp has a storage class of auto and will disappear when we exit. The answer is to specify static.

    static Int tmp = value + p.value;
    

    The storage assigned to tmp will remain reserved for the duration of the program.

    0 讨论(0)
提交回复
热议问题