这次的作业是阅读C++11的新特性并提出问题,作为一个大部分代码都是用C++的基本语法并没有特别关注C++一代又一代新特性的学生来说,首先我阅读了一些关于新特性的文章。为了更快的理解,我首先选择了阅读中文的博客,首先看到了http://blog.csdn.net/hzyong_c/article/details/8273884#t8这篇C++新特性学习笔记,看完关于引入右值引用的概念后,我又查阅了一些关于左值和右值的内容,看到了一些例子,一些基本的区别和用法还是比较理解的,但是对于C++11这次加入的右值引用还是不太理解,所以提出第一个问题:右值引用将会在什么情况下被使用,且如何更好的实现程序?

然后我看到了关于for循环的修改,for语句将允许简单的范围迭代,即

int my_array[]={,,,,};
for(int &x : my_array)
{
x*=;
}

for

因为for语句是非常常见的,如此修改也肯定会简化我们的代码。接下来我看到了另一个亮点即引入了Lambda表达式,语法为:[](形参列表)->返回值类型{函数体},例如想要调用sort函数,原来的代码为

bool compare(int &a,int &b)
{
return a>b; //降序排序
}
sort(a,a+n,compare);

sort

而利用Lambda表达式后代码可以为

sort(a,a+n,[](int &a,int &b)->bool{return a>b;});

new_sort

这样代码只需要一行即可完成,大大简化了代码。为了更加清楚Lambda表达式的运用,我又阅读了http://www.cnblogs.com/L-hq815/archive/2012/08/23/2653002.html这篇专门讲述C++Lambda表达式的文章,看到并运行了一些例子,有了一定的了解。因为bind()和lambda表达式可以实现类似的功能,所以第二个问题为:关于bind()和lambda表达式使用时应该选哪一个,不同情况下哪个更有优势?

接着我又了解了auto关键字的更改,即有被明确初始化的变量可以使用auto关键字,使用auto会避免重复声明编译器已经知道的类型,并且使用位置类型或者类型名称不易李姐时使用auto会更加便利。关于auto关键字我有一个小问题,即:利用auto关键字定义的变量的类型是可变的还是由初始化的变量类型所确定?

接下来我又读了http://blog.sina.com.cn/s/blog_6a1ce1fb01013pca.html,这是对于Welcome Back to C++ (Mordern C++)的翻译,从中我看到了利用智能指针代替裸指针的新特性,有效的解决了因为忘记delete导致程序过早退出的问题,但是从人为delete到指针自动销毁的过程中,我产生了第四个问题,即:在指针被自动销毁时,是否会导致其他指针指向无效内存区,在使用时需要注意哪些问题?

最后令我感兴趣的是http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438288.html中提到的多线程编程,以前进行多线程编程都是需要系统支持的,C++11开始支持多线程编程,且开始一个线程是比较简单的,例如下列代码

#include<thread>
#include<iostream>
void hello()
{
std::cout<<"Hello from thread"<<std::endl;
}
int main()
{
std::thread t1(hello);
t1.join();
std::cout<<"Main Thread"<<std::endl;
return ;
}

thread

由于没有过多的编程经验,所以我对C++的多线程编程还不是很熟悉,第五个问题为:在使用C++进行多线程编程的过程中如何有效避免数据竞争的问题,有没有什么通用的方法?

work_6的更多相关文章

随机推荐

  1. NDK(18)使用C++ STL

    1,在Application.mk 中使用 APP_STL := stlport_static 等. APP_ABI := x86 armeabi APP_PLATFORM := android-15 ...

  2. EBS报表输出文件格式控制

    具体使用方法:1.添加用户参数p_conc_request_id2.在BeforeReport trigger中添加srw.user_exit('FND SRWINIT');          和Af ...

  3. 8天学通MongoDB——第四天 索引操作

    这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅. 好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们 又 ...

  4. Effective C++学习笔记 条款07:为多态基类声明virtual析构函数

    一.C++明确指出:当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未定义——实际执行时通常发生的是对象的 ...

  5. JPA中的@MappedSuperclass

    说明地址:http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html 用来申明一个超类,继承这个类的子类映射 ...

  6. UVa 10943 (数学 递推) How do you add?

    将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ ...

  7. UITableViewCell上的按钮点击事件处理

    转自:  http://www.aichengxu.com/view/42871 UITableViewCell上的按钮点击事件处理,有需要的朋友可以参考下. 今天突然做项目的时候,又遇到处理自定义的 ...

  8. ubuntu下安装使用vmware、kvm、xen

    一. 概念介绍: (1)全虚拟化(Full Virtulization) 简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行, 速度会根据不同的实 ...

  9. GridView表头排序方法设置

    1.效果图 2.前台代码 说明:红色代码为核心代码 <asp:GridView ID="gvData" runat="server" AutoGenera ...

  10. EF 更新指定的字段

    假如你有个表,有30个字段,你只想更新其中的1到2个字段的话,就可以用得上这篇文章 作用:类似于我们以前的sql代码 update xxx表 set name='ok',pwd='ok' where ...