这次的作业是阅读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. 自定义View(5)Paint常用的一些绘制滤镜,特效等介绍

    Shader 返回绘图过程中重复色块的基类 相关方法:Paint::setShader(Shader shader) BitmapShader 从位图加载重复色块 LinearGradient, Ra ...

  2. 注意:C++中double的表示是有误差的

    注意:C++中double的表示是有误差的,直接通过下面的例子看一下 #include<iostream> using namespace std; int main() { double ...

  3. 转载:C++ STL set学习

    声明:本文转载自Penguin的博客 http://blog.sina.com.cn/s/blog_779cf3410101389s.html 1,set的含义是集合,它是一个有序的容器,里面的元素都 ...

  4. Codeforces Round #205 (Div. 2)

    A #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  5. bzoj2823

    最小圆覆盖 有个东西叫作随机增量法,具体可以baidu 这里来说说怎么求三点共圆 这其实就是求两条线段的交点 在编程中,我们解方程是比较麻烦的一个比较好的方法是利用相似三角形 设线段AB,CD交P,则 ...

  6. UVa 11752 (素数筛选 快速幂) The Super Powers

    首先有个关键性的结论就是一个数的合数幂就是超级幂. 最小的合数是4,所以枚举底数的上限是pow(2^64, 1/4) = 2^16 = 65536 对于底数base,指数的上限就是ceil(64*lo ...

  7. LA 3510 (置换 循环分解) Pixel Shuffle

    思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用O(n2k)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A分解循环,m则等于所有循环节长 ...

  8. Discuz 7.2 /faq.php SQL注入漏洞

    测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!   Discuz 7.2 /faq.php SQL注入漏洞   http://www.xxx.com/faq.php?a ...

  9. 安卓表格布局android:collapseColumns,android:shrinkColumns和stretchColumn

    TableLayout的行数由开发人员直接指定,即有多少个TableRow对象(或View控件),就有多少行. TableLayout的列数等于含有最多子控件的TableRow的列数.如第一Table ...

  10. 图表框架HelloCharts(3)饼状图

    1 效果图 2 xml文件 activity_pie_chart.xml <FrameLayout xmlns:android="http://schemas.android.com/ ...