代码之家  ›  专栏  ›  技术社区  ›  mip

这个代码在C++中合法吗?

  •  4
  • mip  · 技术社区  · 15 年前

    我刚发现,当涉及到模板时,此代码在G++3.4.2中编译,并且可以工作,除非不调用m():

    template <typename T>
    class C
    {
         T e;
    
         public:
            C(): e(0) {};
    
        void m()
        {
            e = 0;
        };
     };
    

    现在可以创建和使用实例

    C<const int> c;
    

    直到 c.m() 不是说没有编译错误,但这是合法的吗?

    1 回复  |  直到 15 年前
        1
  •  11
  •   Don Neufeld    15 年前

    是的,这是合法的。模板规范是这样的:在实例化一个方法之前,它不存在,因此编译器不检查它。以下是相关信息 the spec :

    14.7.1-隐式实例化

    -9-实现不应隐式实例化函数 模板,成员模板,a 非虚拟成员函数,成员 类或的静态数据成员 不需要的类模板 实例化。

    推荐文章