给定.getNumberInstance()
和带有签名static const char * const x = "test";
的函数,为什么将此左值绑定到像void DoSomething(std::string && value)
这样的参数是合法的?
我的印象是字符串文字是一个char数组,但它衰减到指针类型,仍然是一个左值。我很困惑为什么这是合法的。
当带有右值参考参数的函数需要获取参数数据的所有权时,如何在只读段中写入PE文件中的内存?我知道记忆没有被移动,但似乎这会导致问题。
答案 0 :(得分:3)
std::string
与const char *
不同。当您使用不能直接绑定到的不同类型的表达式初始化引用时,将创建一个临时类型,该引用具有正确的引用类型。临时值由提供的初始化程序初始化,引用直接绑定到临时表。 Rvalue引用可以绑定到临时值。
然后,该功能可以获得临时数据的所有权。字符串文字未更改(因为构造函数string::string(const char *)
不更改文字,而是获取其内容的副本)。