C++ 奇怪的模板构造函数语法

C++ 奇怪的模板构造函数语法,c++,templates,constructor,C++,Templates,Constructor,两者的区别是什么 template <class T> class why { public: why() {} }; 模板 课堂为什么 { 公众: 为什么 {} }; 及 模板 课堂为什么 { 公众: 为什么 {} }; 它们的工作方式和编译方式似乎相同 编辑 和,如果它们是真正相同的,为什么这个功能甚至在C++语言中?< P>它们是等价的。在前者中,why是一个注入名称,定义为与why相同(其中T是实际的模板参数)。这是为了便于键入 请注意,此注入是在类的范围

两者的区别是什么

template <class T>
class why
{
public:
   why()
   {}
};
模板
课堂为什么
{
公众:
为什么
{}
};

模板
课堂为什么
{
公众:
为什么
{}
};
它们的工作方式和编译方式似乎相同

编辑


和,如果它们是真正相同的,为什么这个功能甚至在C++语言中?

< P>它们是等价的。在前者中,
why
是一个注入名称,定义为与
why
相同(其中
T
是实际的模板参数)。这是为了便于键入


请注意,此注入是在类的范围内,而不是在类的范围外。显而易见,但给出:

template <typename T>
struct foo
{
    foo x(foo f);
};
但这将是一个错误,因为返回类型中的
foo
需要模板参数。但是,参数列表中的
foo
是可以的,因为
foo::
之后我们在类的范围内,
foo
被定义为
foo
。因此,正确的方法是:

template <typename T>
foo<T> foo<T>::x(foo f) { return f; }

template <typename T>
foo<T> foo<T>::x(foo<T> f) { return f; } // equivalent
模板
foo-foo::x(foo-f){return f;}
模板
foo-foo::x(foo-f){return f;}//等价

它们是一样的
why
why
的同义词第二个是。。。你知道,就像你说的那样奇怪。我也想知道。为什么会有这样的情况?如果它是同义词有什么意义?
template <typename T>
foo foo<T>::x(foo f) { return f; }
template <typename T>
foo<T> foo<T>::x(foo f) { return f; }

template <typename T>
foo<T> foo<T>::x(foo<T> f) { return f; } // equivalent