繁体   English   中英

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

[英]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::stringconst char *不同。 当使用无法直接绑定的其他类型的表达式初始化引用时,将创建一个临时类型,该临时类型具有正确的引用类型。 临时文件由提供的初始化程序初始化,并且引用直接绑定到临时文件。 右值引用可以绑定到临时对象。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM