CWYAlpha

Just another WordPress.com site

Thought this was cool: C + +0 x:C + +的未来 什么是C + +0 x的?

leave a comment »


C + +0 x是工作名称的新标准C + +,增加了许多的语言功能,我将在这个系列的C + +11。2011年9月,C + +0 x的新的C + +11标准正式公布,现在许多编译器提供一些核心的C + +11功能的支持。

C + +11包括范围广泛的功能:主要的新功能,如lambda的支持和“移动语义”,通过使用auto关键字的类型推断易用性方面的改进,如循环容器,简化,和许多改进,使模板更容易写,更容易使用。在C + +11该系列将涵盖所有这些特性和更多的。
如果你关心C + +11?

绝对可以。C + +11增加了许多新的语言功能的C + +。C + +11应该可以解决很多烦恼和降低整体冗长的C + +以及提供新的工具,如lambda表达式,提高其整体的表现力和清晰度。如移动语义的Fetaures提高效率的基本的语言,使您可以编写更快的代码和模板系统的改进,使得它更容易编写通用的代码。

新的标准库也将包含许多新功能,包括多线程支持直接添加到C + +和改进的智能指针,简化内存管理,对于那些尚未使用的功能,如boost :: shared_ptr。

我已经开始使用一些新的C + +11的特点,专业的和我爱它。我喜欢的一些新功能,包括新的含义自动关键字,简化的右尖括号模板,lambda表达式和新的函数声明语法更喜欢处理。

如何开发的C + +11?

不承认的辛勤工作,我不能去进一步的关于C + +11的C + +标准委员会 -一组来自学术界和工业界的专家,谁遇到过很多次工作,通过所有边缘的情况下,设计一种编程语言可以实现跨多个平台多个编译器,高效和合理维护的代码。下一个标准,C + +11,看起来是一个梦幻般的灵活性和强大的C + +。

 
什么是C + +11的呢?
语言可用性
 
在开始使用C + +11,我想说的是看它的最根本的办法是,它使C + +更可用的语言。这是不是说,它使一个简单的语言 – 有许多新的功能 – 但它提供了很多的功能,使得它更容易进行编程。让我们看一个例子,auto关键字。
 
在C + +11中,如果编译器能够确定其初始化变量的类型,你需要提供的类型。例如,您可以编写代码,如
int x = 3;
auto y = x;
 
,编译器会推断,y是一个int。这,当然,这并不是一个光辉的榜样,汽车是非常有用的。汽车真正进入自己的工作时,模板,尤其是STL。这是为什么?想象一下,一个迭代器:
map<string, string> address_book;
address_book[ “Alex” ] = “webmaster@cprogramming.com”;
/ /添加一堆人address_book 
 
现在,你想遍历元素的address_book。要做到这一点,你需要一个迭代器:
 
map<string, string>::iterator itr = address_book.begin();
这是一个相当长的类型声明的东西,你已经知道的类型!那岂不是不错的,简单地写:
 
auto itr = address_book.begin();
的代码要短得多,坦率地说,我认为这是更具可读性,而不是少了,因为的模板语法掩盖一切,在该行的。这是我最喜欢的新功能之一,我觉得它省去了很多令人头疼的问题,难以跟踪式编译器错误,或仅仅是节省时间,又不失表现。
 
远程For循环
 
现在,迭代器的例子就是在C + +11已经想出了一个更好的方式处理 – 一些所谓的范围为基础的循环(拥有时下,几乎每一种语言)。我们的想法是如此的优雅,一个例子就够了:
 
vector<int> vec;
vec.push_back( 10 );
vec.push_back( 20 );
 
for (int &i : vec ) 
{
        cout << i;
}
所有你需要做的是给你的迭代变量的范围(定义为迭代器通过调用开始和结束的东西 – 所以STL容器)和你设置!这是一个非常新的功能,可据我所知只有在GCC 4.6。
 
但是,如果你要遍历一个地图吗?你怎么把在地图中存储的值的类型?一个载体,你知道它的价值是一个int。地图,它本质上是一对,与第一和第二给你的键和值。但随着汽车,我们并不需要担心的确切类型,你可以简单的做到这一点:
 
for ( auto address_entry : address_book )
{
        cout  << address_entry.first << ” < ” << address_entry.second << “>” <<endl;
}
可打印出:
Alex <webmaster@cprogramming.com> 

这不就是一个很好的结合在C + +11的新功能?这感觉就像是设计的方式:)

右尖括号

我有一个更多的可用性改进 – 在以前版本的C + +标准,如果你写了一个模板,另一个模板:

vector<vector<int> > vector_of_int_vectors; 

你必须写两个右尖括号之间的空间。这不仅是恼人的,但如果你没有写“没有空间,你会得到的钝和混乱编译器的错误消息。这种现象的原因做一个不起眼的C + +词法分析器的特征称为“  maximal munch rule。好消息是,你不再需要担心!打个招呼

vector<vector<int>> vector_of_int_vectors; 

诚然,这似乎像一个小的事情,但它是一个人的代码编写者机床的胜利。加上它是丑陋的要少得多。右尖括号是巨大的:GCC编译器支持自4.3,MSVC以来第8版(!)和英特尔编译器以后的版本11。

Mulithreading

这是第一次,在C + +11标准将包括对多线程内存模型和相应的库,这意味着你就可以编写符合标准的多线程代码。新标准将提供一切正常,线程功能,如线程和线程局部存储和原子操作。它还将包括一个有趣的功能,期货和承诺。期货和承诺的基本思想是,你可以说,“这个目的,未来,代表着一个结果尚未计算”的工作来计算的值,可以在后台编写代码。值是必要的,当你问它的未来;如果该值是准备好了,你得到它,如果没有,你就等着。

这一系列在以后的文章中我会更深入mulithreading。

许多其他的东西

功能,在C + +11的数量是非常令人兴奋的。什么C + +11维基百科的页面上,你可以得到一个味道,我打算潜入在这个系列中更深入的许多这些功能,包括:

  • How auto,decltype,和新的功能语法携手合作,共创更好的代码
  • Lambda函数
  • 可用性方面的改进,如基于范围的for循环
  • 广义的常量表达式的性能改进
  • 右值引用和移动语义的性能改进
  • 类型安全性的改进,比如nullptr和强类型的枚举
  • 语言表达能力的能力显式覆盖“最后的”虚拟功能的改进
  • 对象构造的改进,如初始化列表,委托构造函数和自动生成功能明确的控制
  • 模板的改进,包括模板的typedef,可变参数模板,统一的初始化和静态断言
  • 新的C + +的内存模型和功能,它支持多线程
  • 标准库的改进,包括正则表达式,哈希表和改进的智能指针
  • 哪些功能被删除或过时的标准,以及为什么

编译器支持C + +11
当然,没有语言功能的事宜,如果它不使用,好消息是,现在许多编译器支持新的C + +11的功能。Apache基金会已编译的C + +语言特性,并支持他们的编译器的编译器支持C + +11的一个非常有用的列表。

有些编译器,如GCC,不自动启用这些功能的支持 – 例如,为使C + +11的功能,你必须编译-STD = C + +0 x的。尽管如此,他们仍然是有价值的,如果你工作在一个项目中,你可以控制的编译器和语言功能集的选择。站长中心原创 http://www.software8.co  转载请注明 
原文链接:http://www.software8.co/wzjs/cpp/884.html

中秋 2012-10-20 08:58 发表评论


from C++博客-首页原创精华区: http://www.cppblog.com/software8/archive/2012/10/20/193559.html

Written by cwyalpha

十月 20, 2012 在 1:56 下午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: