这次的作业是阅读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. 转:java两个jre目录和三个lib目录

    lib目录下放置着jar包.程序中的import语句找的就是这些文件!例如:import javax.servlet.RequestDispatcher;    问题在于,在cmd模式下编译,系统会提 ...

  2. jpa懒加载异常

    1.项目背景概述 事情是这样子的,使用了spring data jpa的项目jeesite jeesite的实体中使用了懒加载模式. 并且一个实体类中还不止一个属性设置了懒加载模式. 项目本身已经存在 ...

  3. std::ofstream由二进制流写文件的问题

    从MPQ包中读取二进制流出来然后文件写到硬盘. DWORD size = SFileGetSize(hFile); char* buffer = new char[size]; std::ofstre ...

  4. js风格技巧

    1.一个页面的所有js都可以写成这样,比如:   var index ={};   index.User = ****;   index.Init = function(){ $("$tes ...

  5. Sciter/HTMLayout内存占用评测

    先从最基础的Exe文件的执行说起: Exe文件要在系统中执行,首先要将Exe文件本身加载入内存中,并且通常在内存中加载完成的Exe所占空间大小会比实际所占的磁盘空间大一些,这是由内存的特殊设定所决定的 ...

  6. busybox filesystem udhcpc 原理

    /******************************************************************** * busybox filesystem udhcpc 原理 ...

  7. java 中的Exception RuntimeException 区别

    在java的异常类体系中: 1.Error和RuntimeException是非检查型异常,其他的都是检查型异常; 2.所有方法都可以在不声明throws的情况下抛出RuntimeException及 ...

  8. 头痛的ASCII和preg_replace()

    说这个之前,大家先看下这条语句: preg_replace("/\<\?\=(\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\[\]\"\'\$\x7f- ...

  9. Party at Hali-Bula

    题意: n个人参加party,给出n个人的工作关系树,一个人和他的顶头上司不能同时参加,party达到的最大人数并判断邀请的最大人数名单是否唯一. 分析: 树状dp入门 dp[i][f],以i为根的子 ...

  10. Tour

    题意: 给n个点的坐标,求形成的最短的闭合回路. 分析: 经典问题,dp[i][j]表示有1-i点再由j回到1点的最短距离,i点有两种情况,在去的路径上 dp[i][j]=min(dp[i][j],d ...