为什么使用 X 而不是 X<T> 作为模板化构造函数和析构函数?
Why use X and not X<T> for templated constructor and destructor?
在专业C++(2e,第689页(中,它说:
仅对于构造函数和析构函数,应该使用
X
,而不是CCD_ 2。
因此:
template<typename T>
class X{
X(); // X
~X(); // X
X<T>& operator=(const X<T>& rhs); // X<T>
};
为什么不应该将X<T>
用于构造函数和析构函数声明?
很简单,这句话是错误的
X<T>
是类型的实际名称:
[C++11: 14.2/6]:
命名类模板专用化的简单模板id是类名(第9条(。
…你可以在任何地方使用它:
template<typename T>
class X
{
public:
X<T>() {}
~X<T>() {}
X<T>& operator=(const X<T>& rhs) {}
};
int main()
{
X<int> x;
}
(现场演示(
您可以选择使用X
作为"简写",从而自动为您添加模板参数(有点(:
[C++11: 14.6.1/1]:
与普通(非模板(类一样,类模板有一个注入的类名(第9条(。注入的类名可以用作模板名或类型名当它与模板参数列表一起使用时,作为模板的模板参数,或者作为友类模板声明的详细类型说明符中的最终标识符时,它指的是类模板本身否则,它等效于<>
中包含的类模板的模板名称和模版参数
…但在任何地方都不需要。
听起来作者试图强制执行风格指南,但没有充分明确地表明这完全取决于您
这里与X无关,它只是一个类名。
由于构造函数和析构函数与类共享相同的名称,并且两者都没有返回类型,因此无需指定它
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- 创建/向容器添加对象时如何使用构造函数/析构函数
- LNK2019构造函数/析构函数使用 C++ Dll
- 有人可以解释一下这里发生了什么(类和构造函数/析构函数)吗?
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 需要构造函数/析构函数/类型转换错误
- Boost共享指针构造函数/析构函数
- 通过值或引用调用时未调用构造函数/析构函数.不管怎样
- C++构造函数析构函数中的奇怪行为
- 构造函数/析构函数链接错误
- 在模板化函数中调用具有特征的显式构造函数/析构函数
- c++构造函数/析构函数
- 为什么赋值的成本不能保证小于构造函数-析构函数对
- 重写默认构造函数/析构函数而不实现它们
- 使用自定义分配器调用对象构造函数/析构函数
- 涉及类和结构的构造函数/析构函数
- 在抽象构造函数/析构函数中调用纯虚拟函数安全吗
- 如果在没有限定的情况下从构造函数/析构函数调用虚拟函数,则是否会发生虚拟调度
- C++基于堆栈的构造函数/析构函数无法按预期工作