为什么字符串文字不是纯右值

RaG*_*__M 2 c++

这次我一直在研究值类别。我对所有关于类别的定义和解释都满意,但我觉得如果有人能解释一下为什么字符串文字不是一个值类别会更好prvale

prvalue我知道当表达式没有身份但可移动时,它的值/结果就属于类别

int i=42;char i='a'; //prvalue
string i ="notprvalue";
Run Code Online (Sandbox Code Playgroud)

难道字面上的“notprvalue”没有身份和动产吗?

Nic*_*las 5

字符串文字无法移动。它们是基本类型的数组,因此移动与副本无法区分。

并且字符串文字具有事实上的对象标识,因为它们的生命周期超出了其本地范围(它们无法移动的另一个原因)。这就是为什么你可以const char*从函数返回一个文字并且程序仍然可以工作。此外,如果两个字符串文字属于同一字符串,则它们可以引用同一字符数组(它们的指针可以相同)。所以“bar”和“bar”可能指向同一个内存。