gpt4 book ai didi

c++ - 为什么当 static const char * const 变量是左值时可绑定(bind)到右值引用参数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:03 25 4
gpt4 key购买 nike

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

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

当具有右值引用参数的函数希望获得参数数据的所有权时,这如何与 PE 文件的只读段中的内存一起使用?我知道内存没有物理移动,但似乎这会导致问题。

最佳答案

std::string 不同于 const char *。当您使用无法直接绑定(bind)到的不同类型的表达式初始化引用时,将创建一个具有正确引用类型的临时对象。临时对象由提供的初始化器初始化,引用直接绑定(bind)到临时对象。右值引用可以绑定(bind)到临时对象。

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

关于c++ - 为什么当 static const char * const 变量是左值时可绑定(bind)到右值引用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com