我知道当对象从函数按值返回时,它们的复制构造函数被调用。如果一个类有一个已删除的复制构造函数,则按值返回将失败。
struct X {
X(const X &) = delete;
};
X f() {
return X{};
}
error: call to deleted constructor of 'X'
C++11 为我们提供了扩展初始化器。我在 SO 帖子的某个地方读到这个
X f() {
return {};
}
是相同的
X f() {
return X{};
}
那么为什么下面的代码没有给我一个错误?它通过了,我什至可以在 main 中调用该函数:
struct D {
D(const D &) = delete;
};
D f() { return {}; }
int main()
{
f();
}
这是一个演示。没有错误报告。我觉得这很奇怪,因为我认为应该调用复制构造函数。谁能解释为什么没有给出错误?