WEB开发网
开发学院软件开发VC VC10中的C++0x特性 Part 2 (1):右值引用 阅读

VC10中的C++0x特性 Part 2 (1):右值引用

 2009-06-10 20:07:44 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 本文为 Part 2 的第一页今天我要讲的是 rvalue references (右值引用),它能实现两件不同的事情: move 语意和完美转发,VC10中的C++0x特性 Part 2 (1):右值引用,刚开始会觉得它们难以理解,因为需要区分 lvalues 和 rvalues ,

本文示例源代码或素材下载

本文为 Part 2 的第一页

今天我要讲的是 rvalue references (右值引用),它能实现两件不同的事情: move 语意和完美转发。刚开始会觉得它们难以理解,因为需要区分 lvalues 和 rvalues ,而只有极少数 C++98/03 程序员对此非常熟悉。这篇文章会很长,因为我打算极其详尽地解释 rvalue references 的运作机制。

不用害怕,使用 ravlue references 是很容易的,比听起来要容易得多。要在你的代码中实现 move semantics 或 perfect forwarding 只需遵循简单的模式,后文我会对此作演示的。学习如何使用 rvalue references 是绝对值得的,因为 move semantics 能带来巨大的性能提升,而 perfect forwarding 让高度泛型代码的编写变得非常容易。

C++ 98/03 中的 lvalues 和 rvalues

要理解C++ 0x中的 rvalue references,你得先理解 C++ 98/03 中的 lvalues 与 rvalues。

术语 “lvalues” 和 “rvalues” 是很容易被搞混的,因为它们的历史渊源也是混淆。(顺带一提,它们的发音是 ‘L values“ 和  ”R values“, 尽管它们都写成一个单词)。这两个概念起初来自 C,后来在 C++ 中被加以发挥。为节省时间,我跳过了有关它们的历史,比如为什么它们被称作 “lvalues” 和 “rvalues”,我将直接讲它们在 C++ 98/03 中是如何运作的。(好吧,这不是什么大秘密: “L” 代表 “left”,“R” 代表 “right”。它们的含义一直在演化而名字却没变,现在已经“名”不副“实”了。与其帮你上一整堂历史课,不如随意地把它们当作像“上夸克”和“下夸克”之类的名字,也不会有什么损失。)

1 2 3 4 5 6  下一页

Tags:VC 特性 Part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接