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

前端之家收集整理的这篇文章主要介绍了c – 为什么模板参数会丢失常量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我认为这是一个非常基本的问题,但我找不到类似的东西.

以下代码无法编译(C3668)

@H_502_4@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后编译

@H_502_4@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是什么,都不能相等.

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

猜你在找的C&C++相关文章