【发布时间】:2017-02-21 13:52:44
【问题描述】:
我认为这是一个非常基本的问题,但我找不到类似的问题。
以下代码无法编译(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& in Foo::doStuff。相反,它似乎已被删除。
【问题讨论】:
-
顶级常量在函数声明中被忽略。此外,
const T表示Param& const,而不是const Param&。