gpt4 book ai didi

c++ - move vector 中的元素

转载 作者:行者123 更新时间:2023-11-28 03:19:56 26 4
gpt4 key购买 nike

<分区>

我正在尝试 move vector 中的元素,这是一个简化的示例

#include <iostream>
#include <vector>

struct A
{
A(size_t i) noexcept : i(i)
{ std::cout << "A-" << i << std::endl; }

A(A const& a) noexcept : i(a.i)
{ std::cout << "A copy" << std::endl; }

void operator=(A const& a) noexcept
{
i = std::move(a.i);
std::cout << "A op=" << std::endl;
}

A(A&& a) noexcept : i(std::move(a.i))
{ std::cout << "A move" << std::endl; }

~A() noexcept { }

int i;
};

int main()
{
// A a0(0);
// A a1 = std::move(a0);

std::vector<A> v;
v.reserve(2);
v.emplace_back( 0 );
v.emplace_back( 1 );
v.emplace_back( 2 );
v[0] = std::move( v[2] );
v[2] = std::move( A(3) );

return 0;
}

vector 在调整大小时调用 move ;我不明白为什么 v[0] = std::move( v[2] ); 不调用 move 函数?

我使用 gcc 4.7.2 版构建时的输出是

A-0
A-1
A-2
A move
A move
A op=
A-3
A op=

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