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)
从构造函数中调用静态函数并不违法.只是,如果你这样做,你会得到一个堆栈溢出.这导致了
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,......
| 归档时间: |
|
| 查看次数: |
2359 次 |
| 最近记录: |