【发布时间】:2014-05-01 20:01:40
【问题描述】:
这是我写的一些代码来说明我的问题:
struct Foo
{
Foo() {}
Foo( Foo && );
Foo( const Foo & ) = delete;
};
Foo GetFoo()
{
return Foo();
}
int main()
{
Foo f = GetFoo();
}
已删除的复制构造函数阻止了隐式默认移动构造函数,因此我必须显式声明一个。但是我既没有使用“= default”,也没有为其提供实现,但整个事情都可以正确编译和链接。如果我删除声明,它将不再编译。
我发现链接器没有抱怨缺少移动构造函数真的很令人惊讶。你能帮我理解为什么吗?
【问题讨论】:
-
它可能被忽略了。 Try
-fno-elide-constructorson g++/clang++ 并看到链接失败。 -
嗯,我刚试过,它似乎仍然有效。 goo.gl/P7lYjv
-
很奇怪。我在 coliru 上使用 g++4.8.2 遇到了同样的问题:coliru.stacked-crooked.com/a/c56eede1a50e2e56 可能 Godbolt 没有链接?示例:goo.gl/1BXrG8
-
哦,我的错,我找了一个带有选项的在线 gcc 编译器,并认为这个也正在链接,对此感到抱歉。
标签: c++ constructor move-semantics