相关疑难解决方法(0)

在C++中省略return语句

我刚从草莓Perl的g ++版本获得了一些奇怪的行为.它允许我省略一个return语句.

我有一个成员函数,它返回一个由两个指针组成的结构,称为boundTag:

struct boundTag Box::getBound(int side) {
    struct boundTag retBoundTag;
    retBoundTag.box = this;
    switch (side)
    {
        // set retBoundTag.bound based on value of "side"
    }
}
Run Code Online (Sandbox Code Playgroud)

这个函数给了我一些不好的输出,我发现它没有返回语句.我原本打算回来,retBoundTag但忘了真正写回报.一旦我添加return retBoundTag;一切都很好.

但我测试了这个功能,并boundTag从中获得了正确的输出.即使是现在,当我删除return语句时,g ++会在没有警告的情况下编译它.WTF?猜它会回来retBoundTag吗?

c++ g++ strawberry-perl

21
推荐指数
2
解决办法
6740
查看次数

当函数中没有指定返回时,C++程序如何获得它们的返回值?

我最近写了一篇文章:
C++程序中的奇怪错误:删除打印输出中断程序

...我试图解决一个看似令人困惑的问题,其中删除一个cout语句会破坏我的程序.

事实证明,我的问题是我忘了返回我后来用于逻辑的真/假成功标志.

但显然SOMETHING正在被归还,如果我把那个cout留在那里,事情总是如此,但是当我把它拿出来时,看起来似乎"神奇地"变得虚假.

我的问题是:
当函数中没有执行返回命令时,什么决定了c ++函数返回什么?它有什么逻辑吗?

显然忘记你的回归类型是个坏主意.在这种情况下,这主要是由于我的程序的性质 - 一个快速的黑客工作.我后来决定,实现一个算法来确定函数调用的成功/失败是不值得的 - 但是意外地遗留了依赖于返回的代码.

令人困惑的是,在编译可执行文件时,g ++没有给出任何警告或错误:

g++ main.cc -g -o it_util
Run Code Online (Sandbox Code Playgroud)

我的版本是:g ++(GCC)4.1.2 20080704(Red Hat 4.1.2-44)

再一次,为了拯救他人未来的挫败感,如果他们犯了同样的愚蠢错误,并且遇到了同样看似不稳定的行为,那么任何人都可以指望没有返回的函数从哪里得到它的返回值?

谢谢!!

c++ memory return return-value

5
推荐指数
2
解决办法
994
查看次数

标签 统计

c++ ×2

g++ ×1

memory ×1

return ×1

return-value ×1

strawberry-perl ×1