gpt4 book ai didi

c++ - 为什么模板参数失去常量性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:38 24 4
gpt4 key购买 nike

我认为这是一个非常基本的问题,但我找不到类似的问题。

以下代码无法编译(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
{
/*...*/
}
};

去掉常量后编译

void doStuff (const Param &)

我在这里错过了什么?我希望通过我的接口(interface)声明强制执行 const Param& in Foo::doStuff。相反,它似乎被删除了。

最佳答案

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

如果TParam&const Tconst Param&是不等价的;前者等同于Param& const,后者等同于Param&
如果您编写不太常见的“postfix-const”形式,就会变得更加明显:无论 T< 是什么,T constParam const & 都不能等效 是。

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

关于c++ - 为什么模板参数失去常量性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com