gpt4 book ai didi

c++ - 将右值引用绑定(bind)到(自动生成的)左值

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:29 30 4
gpt4 key购买 nike

我的搜索发现许多关于右值绑定(bind)到左值的帖子,但没有任何类似的帖子。对不起,如果它是重复的。

struct StrHolder {
StrHolder(std::string&& s) : name(s) {}
void Print() const { std::cout << "My name is " << name << std::endl; }
std::string name;
};

int main()
{
StrHolder s{"Tom"}; // (1) - OK, as expected
s.Print();

std::string n1 {"Angi"};
StrHolder p{std::move(n1)}; // (2) - OK, also as expected
p.Print();

//StrHolder q{n1}; // (3) - NOT OK. Also expected. Cannot bind rvalue reference to lvalue
//q.Print();

auto name1 {"Bon"}; // name1 is an lvalue
StrHolder z{name1}; // (4) - Why is this OK ?
z.Print();

return 0;
}

声明为 auto 的变量 'name1' 是一个左值。因此,“z”的初始化应该会失败,但事实并非如此。

我在这里遗漏了什么吗?

最佳答案

name1 是一个左值...但它不是一个 std::string,它是一个 char const*。从中构造一个 StrHolder 涉及使用其来自 char const* 的隐式构造函数创建一个临时 std::string,然后调用 StrHolder: :StrHolder() 带有对该临时文件的右值引用。 name1 被单独留下,永远不会离开。

关于c++ - 将右值引用绑定(bind)到(自动生成的)左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041617/

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