使用const函数返回const引用时的奇怪行为

时间:2017-06-11 18:25:03

标签: c++

我已经设法修复,或者更确切地解决了这个问题,所以我不是在寻求帮助,但我真的很好奇这种语言的根本原因是什么。

我的代码中有以下代码(cocos2d-x,但我不认为这是相关的)游戏:

const Size& Checkbox::getContentSize() const
{
    Size size;
    size.height = label->getContentSize().width;
    size.width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;

    return size;
}

该函数返回一个只有宽度的大小,而高度保持为0.但是,如果我在返回之前添加任何代码,该函数将返回一个包含正确宽度和高度的大小。

const Size& Checkbox::getContentSize() const
{
    Size size;
    size.height = label->getContentSize().width;
    size.width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;

    int meaninglessInteger = 10;

    return size; //size gets returned properly
}

如果我这样做,它也会正常返回:

const Size& Checkbox::getContentSize() const
{
    float height = label->getContentSize().width;
    float width = label->getContentSize().height + hPadding + checkbox->getContentSize().height;

    return Size(width, height); //size gets returned properly
}

这是来自cocos2d-x引擎本身的虚函数,因此我无法使用参数或使任何不是const或引用。无论如何,我只想知道导致这种行为的原因,特别是为什么通过添加无效的代码来修复它。

1 个答案:

答案 0 :(得分:0)

size 在堆栈中,并且在您返回后将其解除分配。您将返回对将要取消分配的变量的引用。这是未定义的行为。