gpt4 book ai didi

c++ - 我怎么知道 rv 被移动了而不是被复制了?

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:13 25 4
gpt4 key购买 nike

std::string my_func(){
return std::string("...");
}

std::string 可以替换为 std::vector 或任何其他内容。一般来说,我怎么知道 rv 被移动了而不是被复制了?

最佳答案

根据 cppreference ,

In C++11, expressions that ... do not have identity and can be moved from are called prvalue ("pure rvalue") expressions.

像您要返回的临时对象 ( std::string("...") ) 没有身份并且可以从中移动,因为编译器可以检测到它的状态在其生命周期结束之前不会被使用。因此,编译器更愿意移动对象而不是复制它。

但是,临时对象可能根本不会被移动或复制,因为返回值优化 (RVO),一种 copy elision 的形式在存储中构造对象的优化,否则它会被移动到。所以如果你要写 std::string str = my_func(); , 代码可能会被优化以构造 str来自 "..."就地,而不是在 my_func() 中构建字符串然后将其移出。 RVO 适用于任何类型的可复制和/或可移动的对象。

关于c++ - 我怎么知道 rv 被移动了而不是被复制了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45489513/

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