gpt4 book ai didi

c++ - 将变量用作 emplace_back 的参数后可以使用变量吗?

转载 作者:太空狗 更新时间:2023-10-29 23:35:13 24 4
gpt4 key购买 nike

可能是一个蹩脚的问题,但我一直未能找到全面的答案。

std::vector::emplace_back 的参数是右值引用。据我了解,在通过 r 值引用将对象传递到某处后使用对象是不安全的。我的意思是:

std::string str("hello world");
std::string str2(std::move(str)); // string::string(string &&);
cout << str; // unsafe, str was moved to str2

那么,下面的例子会发生什么?

std::vector<std::string> array;
std::string str("hello world"); // what if add 'const' qualifier here?
array.emplace_back(str); // template <class... Args>
// void emplace_back (Args&&... args);
std::cout << str; // safe or not? str was moved or copied?

我真的很困惑。我的测试表明,在 emplace_back 之后使用 str 是安全的,但是我的(损坏的?)逻辑告诉我 str 被移动了并且不应该之后再使用。

附言。抱歉我的英语不好:)

最佳答案

emplace 样式函数的参数是转发 引用,这意味着它们成为左值参数的左值引用和右值参数的右值引用。

array.emplace_back(str);

str 是一个左值(您没有使用 std::move 将其转换为右值),因此它将被复制。它将在调用后保留其值。

关于c++ - 将变量用作 emplace_back 的参数后可以使用变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193868/

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