You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

模板类构造函数语法限制:为何类外定义存在特殊约束?

模板类构造/析构函数的定义语法限制疑问

定义模板类时,构造函数和析构函数有两种合法写法(一种尽量少用<T>,一种尽量多用<T>):

第一种写法:

template <typename T>
class Foo
{
  public:
    Foo(){}
    Foo(Foo const&){}
    ~Foo(){}
};

第二种写法:

template <typename T>
class Foo
{
  public:
    Foo<T>(){}
    Foo<T>(Foo<T> const&){}
    ~Foo<T>(){}
};

在类外定义成员函数时,也有两种合法写法:

第一种类外定义:

template <typename T> Foo<T>::Foo() {}
template <typename T> Foo<T>::Foo(Foo const&) {}
template <typename T> Foo<T>::~Foo() {}

第二种类外定义:

template <typename T> Foo<T>::Foo() {}
template <typename T> Foo<T>::Foo(Foo<T> const&) {}
template <typename T> Foo<T>::~Foo<T>() {} // 没错,这种写法也是合法的

但以下写法是非法的:

template <typename T> Foo<T>::Foo<T>() {}
template <typename T> Foo<T>::Foo<T>(Foo<T> const&) {}

GCC 13.2会报出如下错误:

error: 'Foo::Foo' names the constructor, not the type
error: and 'Foo' has no template constructors

我无法理解该限制的原因,为何仅针对类外定义存在此约束?

内容的提问来源于stack exchange,提问作者Caduchon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:37:16