加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么模板参数会丢失常量?

发布时间:2020-12-16 03:43:23 所属栏目:百科 来源:网络整理
导读:我认为这是一个非常基本的问题,但我找不到类似的东西. 以下代码无法编译(C3668) struct Param{ int a; int b;};template typename Tstruct Foo{ virtual void doStuff (const T) const = 0;};struct Bar : public FooParam{ void doStuff (const Param ) con
我认为这是一个非常基本的问题,但我找不到类似的东西.

以下代码无法编译(C3668)

struct Param
{
    int a;
    int b;
};

template <typename T>
struct Foo
{
    virtual void doStuff (const T) const = 0;
};

struct Bar : public Foo<Param&>
{
    void doStuff (const Param &) const override
    {
        /*...*/
    }
};

它将在删除const后编译

void doStuff (const Param &)

我在这里错过了什么?我希望强制执行const Param&在Foo :: doStuff中使用我的界面声明.相反它似乎被删除了.

解决方法

const不仅仅是文本替换,它适用于整个类型T.

如果T是Param&,const T和const Param&不等同;前者与Param& const,相当于Param&.
如果你编写不太常见的“postfix-const”形式就会变得更加明显:T const和Param const&无论T是什么,都不能相等.

因此,您的“覆盖”不会覆盖任何内容,并且您会收到编译错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读