什么是返回2而不是0?

时间:2016-11-24 17:50:50

标签: c++

在这里,我不知道为什么内联函数返回2而我没有返回任何值。如果我在函数中更改e的值,则函数返回3.我不知道这个请建议。

#include <iostream>

using namespace std;

int a, b;

inline int add(int e, int d)
{
    e = 211;
    d = 312;

    //return e+d;
}

int main()
{
    a = 2; b = 3;
    int c = add(a, b);
    cout << c;
}

1 个答案:

答案 0 :(得分:5)

以这种方式使用函数是未定义的行为。如果函数原型说它返回了某些东西但是你忘记了return,那么所有的赌注都会被取消。如果你打开警告,大多数编译器会警告你这样的事情。例如,gcc / clang的-Wall -Wextra会给出警告

  

警告:函数返回非void [-Wreturn-type]

时没有return语句

从技术上讲,当你声明一个返回某个东西的函数时,调用那个Foo,然后运行时为那个必须返回的Foo分配一些内存。当您实际编写return some_foo;时,返回的对象some_foo正在分配的内存中构建。如果您忘记(或者不想写)return,则分配的内存将保持未初始化状态,因此您最终会从未初始化的对象中读取,这是未定义的行为。