typedef - 基元类型到基元类型

typedef - Primitive type to primitive type

本文关键字:类型 typedef      更新时间:2023-10-16

将一个基元类型的 typedef C++到另一个基元类型是否有效?

typedef int long;

在VS 2012上,发出警告,但编译正常。

警告 C4091:"typedef":未声明任何变量时,在"long"左侧被忽略

但是在 gcc-4.3.4 上,它失败了。

错误:声明不声明任何内容。

哪个编译器符合标准?

PS:我不会在生产代码中写这样的东西。只是想出了这个想法和检查。

它是否有效C++

No. C++11, § 7.1.3.6:

在给定的作用域中,不应使用 typedef 说明符来重新定义在该作用域中声明的任何类型的名称以引用不同的类型。

他们都在说同样的事情,但其中一个报告为错误。请注意,VS 警告显示"typedef 被忽略"。问题是int longlong int是同义词,所以你基本上是在创建一个未命名的typedef到一个long

两者都按照标准的要求去做。该 typedef 无效,两个编译器都会发出诊断程序。