在构造函数中调用静态方法

pol*_*ఠ_ఠ 0 c++ constructor static-methods

这对我来说有点奇怪.由于静态方法可以有一个类的实例,因此人们自然希望编译器不允许在构造函数中调用静态方法.但我已经用每个编译器测试了下面的代码,具有讽刺意味的是,它们都没有给我一个警告.虽然在执行时间内它们都会抛出异常.我在这里错过了什么吗?

#include <iostream>

class Foo
{
public:
    inline Foo()
    {
        std::cout << "testing: var = " << bar() - 1 << '\n';
    }
    ~Foo(){}

    static int bar()
    {
        Foo f;
        f.var = 10;
        return f.test();
    }
private:
    int var;
    int test()
    {
        return var + 1;
    }
};

int main()
{
    Foo foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

实例

Aco*_*gua 5

从构造函数中调用静态函数并不违法.只是,如果你这样做,你会得到一个堆栈溢出.这导致了

Foo()调用bar(); bar()调用Foo(); Foo()调用bar(); bar()调用Foo(); ...

直到没有堆栈为止.

这与您的情况完全相同:

void f1();
void f2()
{
    f1();
}
void f1()
{
    f2();
}
int main(int, char*[])
{
    f1();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

只有两个全局函数,仅此而已.在C中也是如此(但你已经在void f(void)那里声明),或Java,C#,perl,python,......

  • @polfosol:恰恰相反,clang对你的期望更高. (8认同)