homework-07
C++11新特性学习
本人几乎没有写过C++,所写内容完全建立在与其他语言的比较上。观点偏激请见谅。
阅读的博客
我阅读了如下文章:
- http://blog.csdn.net/hzyong_c/article/details/8273884
- http://zhangjunxin520.blog.163.com/blog/static/3050370320116210101891/
- http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438176.html
- http://www.cnblogs.com/haippy/archive/2013/05/31/3111560.html
- http://www.2cto.com/kf/201108/100800.html
- http://www.2cto.com/kf/201304/200848.html
- http://www.2cto.com/kf/201301/185482.html
- http://www.2cto.com/kf/201210/163755.html
- http://www.2cto.com/kf/201307/231527.html
- http://en.wikipedia.org/wiki/C%2B%2B11
C++11新特性
lambda表达式
首先我最感兴趣的是lambda表达式。lambda表达式源于函数式编程,在C++中相当于简写的匿名函数。在C中,所有的函数都是平行的,不能在函数中定义函数。而有些时候,我们需要一个临时的函数,可能只会调用一次。如果把它单独拿出来写成一个函数不仅不方便,还容易造成污染。lambda表达式就是为了应对这种情况而产生的。lambda表达式可以用比较简洁的语法在行内直接定义一个临时函数,不仅方便,而且也限制了别人的访问,更私有。
不过说实话跟ruby比起来实在是弱爆了……当然ruby是动态语言这样比并不公平。
自动类型推导 auto
自动类型推导,顾名思义,就是自动推导出变量的类型。在C++03中,在声明对象时,你必须指定对象的类型。然而,在许多情况下,对象声明时都有初始化,C++11利用了这个优势,允许你声明对象时不指定类型:
auto x=0; // x has type int because 0 is int
auto c='a'; // char
auto d=0.5; // double
auto national_debt=14400000000000LL; //long long
自动类型推导主要用于对象类型很长很麻烦的时候,或者是对象是自动生成的时候(使用模板时)。
自动类型推导虽然方便,但不应滥用。比如下面的代码的可读性就降低了。因为,我不知道ProcessData返回什么?int?bool?还是对象?或是别的什么?这让你后面的程序不知道怎么做。
auto obj = ProcessData(someVariables);
但是下面的程序就没有问题,因为pObject的型别在后面的new中有了。
auto pObject = new SomeType<OtherType>::SomeOtherType();
关于自动类型推导我想说……放下类型,立地成佛阿,弄了这么个奇奇怪怪的东西是何苦呢。
空指针nullptr
C++11 引入了新的关键字来代表空指针常数:nullptr
char* pc = nullptr; // OK
int * pi = nullptr; // OK
int i = nullptr; // error
foo(nullptr); // 呼叫 foo(char *)
以范围为基础的 for 循环
for 语句将允许简单的范围迭代:
int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array)
{
x *= 2;
}
for语句这么写可以很方便地遍历vector这类的容器。请注意,你依然可以用continue语句来开始下一次迭代,使用break跳出循环。这一点和普通的for循环一样。
自己定义的类也可以放在ranged-based for loops中进行迭代。事实上要想进行迭代,一个类需要满足以下条件: begin函数和end函数,作用是分别指向第一个数据和最后一个数据。返回值是一个可以自己定义的迭代器。
总结与提问
我能看懂的也就上面这些了。可能是这学期接触了ruby的缘故,C++11这些新特性在我看来有点让人困惑:咦?C++原来没有这些功能吗?
好吧,C++是如此的快速以至于你不能在别的放面对它要求太高。但说实话,太丑陋了。
相比之下,我更喜欢c和ruby。我不会用C写非常庞大的程序,也不会用ruby写对效率要求很高的程序。把时间用在真正需要思考的地方才是最好的。
问题:
- C++的优势在哪?
- 除了运行效率?
- 除了面试题?
- 类型真的是必不可少的吗?
- 如果是,原因是什么?
- 有没有可能实现运行效率与实现效率的兼得?
- 如果可能,怎么做?是否需要牺牲其他的东西?
- C++的设计理念是什么?
由于自身知识有限,观点可能非常偏激幼稚理想,求打醒。如果连我都无法说服,那么就和我一起偏激幼稚理想吧。