gpt4 book ai didi

c++ - move 语义何时适用于 std::move?

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:02 26 4
gpt4 key购买 nike

move 语义在这个例子中是如何工作的:

struct test {
int ii[10];
int i;
};

test f() {
test a;
std::cout << "[1] " << &a << std::endl;
return a;
}

int main()
{
test x (f());
std::cout << "[2] " << &x << std::endl;
test x1 (std::move(x));
std::cout << "[3] " << &x1;
}

输出:

[1] 0x7fff50ac70c0
[2] 0x7fff50ac70c0
[3] 0x7fff50ac70f0

为什么 x 是使用 f() 的返回值构造的,但 x1 的地址与 x 不同?

编辑

struct test {
std::string s;
}

[...]

std::cout << (*void)&x.s[0];

我想我终于明白了。现在地址是一样的。

最佳答案

这实际上与 move 语义没有任何关系。 ax 具有相同的内存地址,因为拷贝是 elided ,所以 f 的返回直接在调用点分配。 x1x 没有相同的地址,因为它是一个单独的对象,不同的对象不能有相同的地址。 move 不会改变地址,它允许你的对象的内脏被撕掉并粘贴到 move 到的对象中。

关于c++ - move 语义何时适用于 std::move?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633473/

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