C++11之前value categories只有两类,lvalue和rvalue,在C++11之后出现了新的value categories,即prvalue, glvalue, xvalue。不理解value categories可能会让我们遇到一些坑时不知怎么去修改,所以理解value categories对于写C++的人来说是比较重要的。而理解value categories离不开一个概念――move semantics。了解C++11的人我相信都了解了std::move,右值引用,移动构造/移动复制等概念,但是对move semantics这个概念的准确定义,可能还有很多人比较模糊。我想通过这篇文章谈一谈我对value categories和move semantics的理解。semantics是来自语言学的一个概念,翻译成中文就是“语义”。说到计算机语言,可能有很多人认为他是计算机科学下面的子门类。所以我们先从自然语言入手,通过类比能够更好地理解move semantics。下面有两个句子:

C++11中value category(值类别)及move semantics(移动语义)的介绍

C++11中value category(值类别)及move semantics(移动语义)的介绍

C++11中value category(值类别)及move semantics(移动语义)的介绍