cppreference.com 对已删除函数的描述中有一句话:
但是,允许隐式 ODR 使用恰好被删除的非纯虚拟成员函数。
您能否提供此案例的代码示例?
我尝试这样做:
struct ff
{
virtual int fd()
{
return 0;
}
};
struct ddff : public ff
{
int fd()
{
throw std::exception("ttt");
}
};
struct dd : public ddff
{
int fd() = delete;
};
int main()
{
ff* d = new dd();
d->fd();
但是它带来了一个错误:
错误 C2282 'dd::fd' 无法覆盖 'ddff::fd'
感谢您评论:
即使您从未提及,虚拟函数也被视为 ODR 使用 它们在你的代码中。这句话的意思是这样的 odr-use 删除的功能没问题。你的错误来自于这样的事实 已删除的函数不能覆盖未删除的函数,反之亦然。