静态成员函数赋值不带return语句

时间:2017-07-26 21:05:04

标签: c++ static-methods

在类中,我们有一个名为set_value的静态成员函数。这个函数,因为静态允许它,可以由main()访问,给定范围解析由类Something。它的返回类型是int,但该函数不返回任何内容。这可以。但是,编译器如何知道在main()?

中的调用语句中将此值赋给b
var proxiedRequest = request.defaults({
    proxy: "http://proxy.xxx.xxxxxxx.be:XXXX",
    maxRedirects : 5,
    jar: true // enable cookie
});

我得到以下输出

#include <iostream>

using namespace std;

class Something{
private:
    static int value;
public:
    static int set_value (int x)
    {
        value = x;
        // return statement missing? But still works!
    }

};

int Something::value = 1;
// since no object of something is created we call
// the constructor of the data type in the object

int main()
{
    int b;
    cout << "Success!" << endl;
    b = Something::set_value(5);
    cout << "The Value of b is " << b << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您正在体验名为未定义行为的内容。当您违反规则时会发生这种情况。在具有未定义行为(UB)的程序中,任何结果都被视为有效。我们的意思是&#34;任何&#34;。删除你的硬盘?完美有效的结果。按预期工作?也可能发生。按照预期工作,直到你的老板看起来?你可能会在这里开始注意一个模式。

答案 1 :(得分:0)

我认为这个问题的答案将帮助您了解正在发生的事情:

"Why does flowing off the end of a non-void function without returning a value not produce a compiler error?"

简而言之,您的编译器不会检查缺少return语句,因为它很难,并且b设置为5的原因可能是由于方法调用的残余堆栈状态