(只是个人的感情喜好, 可能不适合某些人, 特别是对 C++ 比较有感情的人.) 我终于知道 Linus 为什么会骂 C++ 是狗屎了, 因为它把简单的东西变得复杂了(当然, 它也把某些复杂的东西变简单了).
#include
class A{
public:
void fun();
};
void A::fun(){
printf("fun\n");
}
int main(int argc, char *argv[]){
A a;
void (A::*p)() = &A::fun;
(a.*p)();
return 0;
}
这是什么狗屎? 如果这样的话, 函数指针还有实用意义吗? -- 为了调用类中的一个方法, 你竟然需要知道该方法的名称, 所处的类的名称, 以及它的实例的名称, 而且调用的时候还要加上实例的名称(4 个条件)! 这就是真正的狗屎!
我希望是下面的形式(只需要两个条件: 类实例的名称, 方法的名称):
void (*p)() = a.fun;
p();
是的, C# 做到了, 所以 C# 被人称为语法优美的语言.