“隐式 ODR 使用恰好被删除的非纯虚拟成员函数”示例

问题描述 投票:0回答:1

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'

c++ language-lawyer virtual-functions one-definition-rule deleted-functions
1个回答
0
投票

感谢您评论

即使您从未提及,虚拟函数也被视为 ODR 使用 它们在你的代码中。这句话的意思是这样的 odr-use 删除的功能没问题。你的错误来自于这样的事实 已删除的函数不能覆盖未删除的函数,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.