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