VC10中的C++0x特性 Part 2 (1):右值引用
2009-06-10 20:07:44 来源:WEB开发网本文示例源代码或素材下载
本文为 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”。它们的含义一直在演化而名字却没变,现在已经“名”不副“实”了。与其帮你上一整堂历史课,不如随意地把它们当作像“上夸克”和“下夸克”之类的名字,也不会有什么损失。)
更多精彩
赞助商链接