【发布时间】:2016-03-29 05:48:30
【问题描述】:
我刚刚发现以下代码不是有效的 C++(在 ~ 之后它不会在 int 处解析):
int x = 5;
x.~int();
但是,以下 sn-p 确实有效:
int32_t x = 5;
x.~int32_t();
这是因为 int32_t 在我的特定 C++ 实现中是 typedef,显然可以在任何类型定义的类型上调用析构函数。
我的问题是:是否需要任何 C++ 实现才能允许第二个片段进行编译?特别是,int32_t 是否保证为 typedef,如果编译器知道 typedef typedef 将某些内容转换为 int,是否需要允许销毁 typedef?
【问题讨论】:
-
是的。
int32_t不是内置类型,不允许是宏。 -
@Cheersandhth.-Alf C++14 标准草案将
typedef signed integer type int32_t;定义为int32_t的定义。据我所知,这并没有为用户定义的类型和所有甚至宏留下太多空间。 -
为了避免关闭问题/未解决问题之战,我不会投票关闭作为重复项,但是......这是链接问题的重复项。仅仅因为其他问题没有提到
int32_t并不意味着其他问题没有回答您的问题。 -
@DavidHammen,我现在失去了链接,但那里的答案解释了为什么它适用于模板参数。这并不意味着同样适用于 typedef,或者 int32_t 必须以 typedef 开头。所以从技术上讲,它没有回答我的任何具体问题。
标签: c++ destructor