学习C++的这两个月,深刻觉得C++的语法实在是太复杂了,而且每一个新标准都添加了大量的东西。
然而,我擅自认为,有许多东西显得冗杂了些。
比如对动态内存的初始化有这么一种东西:
auto p = new auto(obj);
其含义是p指向一个与obj类型相同的对象,该对象用obj进行值初始化。
第二个auto推断obj类型,第一个auto推断指针类型。
例如这个程序:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
//1.
auto pi = new auto(1234);
cout << *pi << endl; //print 1234
//2. 等价于1.
int *pi2 = new auto(1234);
cout << *pi2 << endl; //print 1234
//3. 更传统的方法
int *pi3 = new int(1234);
cout << *pi3 << endl; //print 1234
return 0;
}
我认为更传统的方法,更直观、更便于阅读、更利于维护。
那么,让auto去推断obj类型是语句是否显得冗杂了些呢?
既然一种规则存在,通常就会有人去使用它。当这样“看起来很多余”的规则变成了几十条、几百条。。。之后,对于人的记忆力就是极大的考验。
语言的规则本身并不难,试图让语言的用法更容易被更多人学习而增加太多东西的话,有时候会显得画蛇添足,反而增加了语言的复杂性,垒高了学习壁垒。
这未必是一件好事。o(╯□╰)o
2016/11/13补充:
这个例子举得并不好,因为这可以归纳为auto的使用。
auto的使用非常灵活,各种推断,因此需要对语言有比较扎实的认知才能很好的使用auto。