请考虑以下代码。
struct foo
{
};
template<typename T>
class test
{
public:
test() {}
const T& value() const
{
return f;
}
private:
T f;
};
int main()
{
const test<foo*> t;
foo* f = t.value();
return 0;
}
t
是一个const
变量,value()
是一个返回的常量成员函数const T&
。AFAIK,一个const
类型不能分配给一个非常量类型。但是如何foo* f = t.value();
编译得很好。这是如何发生的,我如何确保value()
只能分配给const foo*
?
编辑
我发现,这是在使用模板时发生的。以下代码按预期工作。
class test
{
public:
test() {}
const foo* value() const { return f; }
private:
foo* f;
};
int main()
{
const test t;
foo* f = t.value(); // error here
return 0;
}
为什么使用模板时会出现问题?