work_6
这次的作业是阅读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的更多相关文章
随机推荐
- C#获取本机IP以及无线网ip
1 private void GetIP() 2 { 3 string hostName = Dns.GetHostName();//本机名 4 //System.Net.IPAddress ...
- Android开发之获取时间SystemClock
转载:http://blog.csdn.net/tianfeng701/article/details/7562359 在Andriod中关于线程一部分中经常会遇到计算时间的操作,这里面应用较多的是S ...
- RazorEngine 3.6.5.0
public class Person { public string Name { get; set; } public string Code { get; set; } } var templa ...
- bzoj2875: [Noi2012]随机数生成器
矩阵乘法. x[n] = {x[0],1} * ( {a,0} ^ n ) {b,1} 写成这样谁能看懂.... noi里的大水题.我居然 #include<cstdio> #includ ...
- sql语句记录
清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 收缩数据库 DBCC SHRINKDATABASE(数据 ...
- UVALive 4128 Steam Roller(最短路(拆点,多状态))
题意:模拟了汽车的行驶过程,边上的权值为全速通过所消耗的时间,而起步(从起点出发的边).刹车(到终点结束的边).减速(即将拐弯的边).加速(刚完成拐弯的边)这四种不能达到全速的情况,消耗的时间为权值* ...
- 【C#学习笔记】读文件
using System; using System.IO; namespace ConsoleApplication { class Program { static void Main(strin ...
- Oracle Analyze 命令 详解
官网的链接如下: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_4005.htm#SQLRF01105 使用DBMS ...
- 【转】Android SwitchButton(滑动开关)
原文网址:http://blog.csdn.net/wangjinyu501/article/details/27961303 版本:1.0 日期:2014.5.17 2014.6.1 版权:© 20 ...
- 关于KOBE 退役
今天在网上看到一行话,写在KOBE 退役之际 关于职业,最值得问的是自己我有没有像科比那样始终表现出对团队的忠诚和对职业的热爱?从不被别人的误解和攻击打倒?在团队最困难的时候站出来做能做的一切?用职业 ...