为什么这个模板函数能够成功编译
Why exactly is this template function successfully compiling?
可能重复:
内置类型(int、char等)的析构函数
模板功能:
template<typename T> void kill(T* type)
{
type->~T();
}
呼叫:
int x= 5;
kill(&x);
哇,它编译了!?像int
这样的基元类型怎么可能有析构函数?它也适用于char
、bool
等。
标准§12.4.16规定
16[注意:析构函数显式调用的表示法可以用于任何标量类型name(5.2.4)。允许这样做可以编写代码,而不必知道给定类型的析构函数存在。例如,
typedef int I; I* p; p->I::~I();
--尾注]
标准的相关部分为§5.2.4/1:
在点后面使用伪析构函数名称。或箭头->运算符表示按类型名称命名的非类类型的析构函数。结果只能用作函数调用运算符()的操作数,并且此类调用的结果的类型为void。唯一的效果是对点或箭头之前的后缀表达式进行求值。
相关文章:
- VS2017 版本 15.8.3 成功编译内联方法,而不返回所需值
- 如何在 c++ 中导入文件?以及如何成功编译它们?
- 奇怪的语法构造 - 应用于 typedef 的运算符 () 使用 VS2015 成功编译
- "template"关键字限定符是否会导致代码成功编译,但不同?
- 使用不带前缀"std"且不带"using namespace std;"的 std::sort() 成功编译
- 在 C++11 和 C++11 之前成功编译但行为不同的代码示例
- 有没有人在Windows7机器上成功编译过木瓜
- CGAL:如何成功编译和链接CGAL示例(在Mac OS X 10.9 Mavericks上)
- 使用 qmake 成功编译 SSE 指令(但 SSE2 不被识别)
- Socket C++程序在运行时成功编译崩溃
- 在 clang 中显式指定的参数无效,但在 gcc 中成功编译 — 谁错了?
- 为什么这个模板函数能够成功编译
- 无法使用Xcode成功编译boost
- Eclipse可以成功编译,但仍然会出现语义错误
- 成功编译节点模块并"Module did not self-register."
- Eclipse 给出错误"无法解析函数'MessageBoxA'",但仍然成功编译?
- C++ 成功编译,不包含<string>标题
- CGAL4.6 中成功编译的代码的编译错误
- 捕获而不尝试成功编译
- 为什么以下代码在VS2010中成功编译