gpt4 book ai didi

c++ - 在没有实现的情况下 move 构造函数,但它可以工作

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

这是我写的一些代码来说明我的问题:

struct Foo
{
Foo() {}
Foo( Foo && );
Foo( const Foo & ) = delete;
};

Foo GetFoo()
{
return Foo();
}

int main()
{
Foo f = GetFoo();
}

删除的复制构造函数阻止了隐式默认 move 构造函数,因此我必须明确声明一个。但是我既没有使用“= default”也没有为它提供实现,但整个事情编译和链接正确。如果我删除声明,它将不再编译。

我发现链接器没有提示缺少 move 构造函数真的很令人惊讶。你能帮我理解为什么吗?

最佳答案

当以type identifier = Function() 形式初始化变量时,编译器确认复制/move 构造函数被声明为可用,然后忽略它并尝试从右侧构造直接(“复制/move 省略”)。然后它有 Function 将变量直接构建到 main 中,以跳过 move/复制(这是“返回值优化”)。这些类型一起工作并绕过任何和所有 move/复制,Function 最终直接构造 f。由于实际上并未使用 move 构造函数,因此链接器并未查找它,因此未能注意到丢失的定义。

关于c++ - 在没有实现的情况下 move 构造函数,但它可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415620/

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