doc*_*doc 4 c++ templates const const-correctness
我刚刚发现,当涉及到模板时,这个代码在g ++ 3.4.2中编译,并且除非不调用m(),否则它可以工作:
template <typename T>
class C
{
T e;
public:
C(): e(0) {};
void m()
{
e = 0;
};
};
Run Code Online (Sandbox Code Playgroud)
现在可以创建和使用实例
C<const int> c;
Run Code Online (Sandbox Code Playgroud)
直到c.m()没有被称为没有编译错误,但这是合法的吗?
Don*_*eld 11
是的,这是合法的.模板规范是在实例化方法之前,它不存在,因此编译器不会检查它.这是规范中的相关位:
14.7.1 - 隐式实例化
-9-实现不应隐式实例化函数模板,成员模板,非虚拟成员函数,成员类或不需要实例化的类模板的静态数据成员.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |