当前位置:  开发笔记 > 编程语言 > 正文

在int32_t上调用析构函数是否合法?

如何解决《在int32_t上调用析构函数是否合法?》经验,为你挑选了1个好方法。

我刚刚发现下面的代码是不是有效的C++(它不会在解析int~):

int x = 5;
x.~int();

但是,以下代码段确实有效:

int32_t x = 5;
x.~int32_t();

这是因为int32_ttypedef在我的特定实现C++的,和析构函数,显然,可以在任何Typedef的类型调用.

我的问题是:是否需要允许第二个剪切编译的C++的任何实现?特别是,int32_t保证是一个typedef,并且如果它知道typedef typedef要int的话,是否允许销毁typedef所需的编译器?



1> Jerry Coffin..:

有一个明确的要求int32_t是typedef.我们从[cstdint.syn]/2开始:

标题定义了所有函数,类型和宏,与C标准中的7.18相同.

那么我们从那里看看C库的要求:

typedef名 intN_t表示具有宽度N,没有填充比特,和一个二的补码表示的符号整数类型.

[强调补充]

所以是的,int32_t必须是"typedef名称".

虽然(据我所知)它从未直接在规范性文本中声明,但以下注释清楚地表明,为解析为内置类型的typedef调用析构函数是为了编译并成功([class.dtor]/16):

注意:显式调用析构函数的表示法可用于任何标量类型名称(5.2.4).允许这样就可以编写代码而无需知道给定类型是否存在析构函数.例如,

typedef int I;
I* p;
p->I::~I();

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有