C++诞生至今已有悠久的历史,在此期间有人为它疯狂,有人对它失望,有人望而怯之,有人却始终坚持,有人试图驯服它,有人被它的庞大吓跑。争论从来不曾消停过!
为什么是C?
C是灵活的;C非常高效;C具有庞大的用户群,而且至今不衰;C有很好的移植性和稳定性。如果单纯只是C,那么我觉得很完美了。可偏偏非要在C的基础上加上很多复杂的功能。导致了C++的难。
如果C++可以放弃对C的完全兼容,那么它远可以比现在更简单得多得多! 如果没有八种整数的支持,重载函数可以更简单。如果丢弃C语言的声明语言,C++会更简洁明确。
int (*pf) ();
我们甚至不知道它是声明还是表达式。只能依靠规定。
一位C同事跑来对我吼道:为什么C里面的良好设计到C++里面就成了错误?
struct S
{
...
String str;
};
S s;
memset(&s, ...)
如果C++不兼容C语言的struct,C++会变得简洁。
template <struct Type>
void func()
{
...
}
你也许会说这样的写法为什么会编译不过,而这样的写法却可以:
template <class Type>
void func()
{
...
}
如果不是那么在意C的紧筹布局,那么我们可以在class里面放一些更多有用的内容来换取更方便的设计。比如可以很好的支持GC(这真是一个让C++程序员抓狂的玩意);比如序列化;比如反射机制等等。
我们来看个怪异的写法:
struct S
{
};
int S = 0;
S s; //error
这种写法对C++来说是不合法,因为我们要去支持C 导致牵强的写法。
C++是一个什么都想做什么都想兼容的语言。到后面发现哇~原来已经这么复杂了。复杂到连编译器支持新特性都已经很难(为什么C++0x一度延期到C++1x,还很多标准被否决掉)。