为什么静态const char * const变量在它是左值时可绑定到右值引用参数?

时间:2017-05-24 23:07:02

标签: c++

给定.getNumberInstance()和带有签名static const char * const x = "test";的函数,为什么将此左值绑定到像void DoSomething(std::string && value)这样的参数是合法的?

我的印象是字符串文字是一个char数组,但它衰减到指针类型,仍然是一个左值。我很困惑为什么这是合法的。

当带有右值参考参数的函数需要获取参数数据的所有权时,如何在只读段中写入PE文件中的内存?我知道记忆没有被移动,但似乎这会导致问题。

1 个答案:

答案 0 :(得分:3)

std::stringconst char *不同。当您使用不能直接绑定到的不同类型的表达式初始化引用时,将创建一个临时类型,该引用具有正确的引用类型。临时值由提供的初始化程序初始化,引用直接绑定到临时表。 Rvalue引用可以绑定到临时值。

然后,该功能可以获得临时数据的所有权。字符串文字未更改(因为构造函数string::string(const char *)不更改文字,而是获取其内容的副本)。