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

标签 c++

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

我知道表达式的值/结果在没有标识但可移动时属于 prvalue 类别

int i=42;char i='a'; //prvalue
string i ="notprvalue";

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

最佳答案

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

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

关于c++ - 为什么字符串文字不是纯右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41350090/

相关文章:

c++ - 它没有像预期的那样 sleep

c++ - boost 的正则表达式无法编译

c++ - opencv和tesseract有冲突吗?

c++ - 上下文切换是否每次都有效,还是会导致意外行为?

c++ - 如何在不同的类之间共享效用函数?

c++ - std::function<void(int&)> 类型的大小

c++ - using 声明可以出现在 block /函数范围内吗?

c++ - 使用 boost::pool 时 CPU 使用率高

c++ - CUDA 写入其他 warp 看不到的全局内存

c++ - 使用 XML 文件存储数据