struct Functor { Functor &foo; // not copy ctor,put "int" as dummy parameter Functor(int, Functor &f):foo(f){} int operator()(int x) const{ return (x < 2)? 1:x*foo(x-1);} }; int main(void){ Functor f(0, f); printf("%d\n",f(5)); return 0; }
但是VC2010上面就会编译错误
f(0,f)里面的第二个f是未定义的。
为什么呢? 是VC不支持,还是说标准没有说能否这样用,看编译器的实现者。 请赐教!
[解决办法] 没看标准,不过感觉基本属于未定义行为,这样写代码有什么好处啊?
[解决办法] int& f = f; o O [解决办法] 这样的行为应该是属于未定义的。 [解决办法] 你去看看标准上是怎么解释 int i=i;这样类似的代码吧 [解决办法] 应该是可以的。从实现的角度讲,如果是个指针,绝对可行,只要对象的空间已经被确定了。引用应该没什么区别。使用上只要注意不要在构造函数中去使用这个引用,是不会有什么问题的。