C++ 使用常量函数返回常量引用时的奇怪行为

C++ 使用常量函数返回常量引用时的奇怪行为,c++,C++,我已经设法解决了这个问题,或者说解决了这个问题,所以我不是在寻求帮助,但我真的很好奇语言中的根本原因是什么 我的(cocos2d-x,但我认为这不相关)游戏中有以下代码: 函数返回的大小仅为宽度,而高度保持为0。但是,如果在返回之前添加任何代码,函数将返回包含正确宽度和高度的大小 const Size& Checkbox::getContentSize() const { Size size; size.height = label->getContentSize(

我已经设法解决了这个问题,或者说解决了这个问题,所以我不是在寻求帮助,但我真的很好奇语言中的根本原因是什么

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

函数返回的大小仅为宽度,而高度保持为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引擎本身的一个虚拟函数,因此我无法处理参数,也无法生成任何非常量或引用的内容。无论如何,我只想知道是什么导致了这种行为,特别是为什么它会通过添加不起任何作用的代码而得到修复。

大小在堆栈中,在返回后会被释放。您正在返回对将被解除分配的变量的引用。这是未定义的行为

这些都会调用未定义的行为-您无法返回对本地对象的引用。
尤其是为什么它会通过添加不起任何作用的代码得到修复。
在未定义的行为中可能会发生类似的事情。返回对局部变量的引用从来都不是一个好主意。如果您打开了警告,您应该从编译器中删除它们,不要忽略它们。因此,唯一正确的方法是在我的类中设置一个大小,该大小将由函数更新并返回?至于警告,我对cocos不推荐的功能了解得太多了,所以很难过滤出任何有意义的东西。但是Resharper和Visual Studio都没有在编辑器中警告我。
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
}