[英]Why is a static const char * const variable bindable to an rvalue reference parameter when it is an lvalue?
给定static const char * const x = "test";
以及带有签名void DoSomething(std::string && value)
的函数,为什么将此左值绑定到参数是合法的,就像DoSomething(x);
?
我的印象是字符串文字是一个char数组,但是它会衰减为指针类型,并且仍然是左值。 我只是困惑为什么这是合法的。
当带有右值引用参数的函数希望获得该参数数据的所有权时,这如何与PE文件的只读段中的内存一起使用? 我了解内存并未物理移动,但似乎会引起问题。
std::string
与const char *
不同。 当使用无法直接绑定的其他类型的表达式初始化引用时,将创建一个临时类型,该临时类型具有正确的引用类型。 临时文件由提供的初始化程序初始化,并且引用直接绑定到临时文件。 右值引用可以绑定到临时对象。
然后,该功能可以获取临时数据的所有权。 字符串文字不变(因为构造函数string::string(const char *)
不会更改文字,而是获取其内容的副本)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.