C++ 在详细的说明符中使用typedef name
根据($3.4.4),typedef名称后跟类键是无效的。但我不确定是哪个范围?例如:在下面的例子中,编译器不会抱怨在诸如函数内部的块中使用了详细的说明符C++ 在详细的说明符中使用typedef name,c++,g++,typedef,C++,G++,Typedef,根据($3.4.4),typedef名称后跟类键是无效的。但我不确定是哪个范围?例如:在下面的例子中,编译器不会抱怨在诸如函数内部的块中使用了详细的说明符 typedef class { /* ... */ } S; // invalid class S; // ok void foo() { class S; } 使用typedef name在本地范围内声明类是否有效,为什么?问题是您声明的类没有名称,但使用别名(typedef)。后来,您使用了相同的名称来声明,但没有定义另一个类
typedef class { /* ... */ } S;
// invalid
class S;
// ok
void foo() {
class S;
}
使用typedef name在本地范围内声明类是否有效,为什么?问题是您声明的类没有名称,但使用别名(typedef)。后来,您使用了相同的名称来声明,但没有定义另一个类(我知道这不是目的,但编译器理解这一点),并且它的名称与typedef冲突。当您在foo()中执行相同的操作时,这是一个单独的范围,因此是可以接受的。但请注意,foo()内部的“类S”与第一行中声明的类型不同。在函数外部,不能在同一命名空间中声明与
typedef
同名的类
在函数内部,您正在声明一个新类,其作用域位于函数内部。它与周围命名空间中声明的匿名类不同。在函数中,这隐藏了
typedef
7.1.3第3段的声明:
在给定范围内,不得使用typedef说明符重新定义
在thascope中声明的任何类型的名称,以引用不同的
类型。
[示例:
错误:重新定义
然后是:
-类似地,在给定范围内,类或枚举
不应使用与所使用的typedef名称相同的名称声明
在该范围中声明,并引用除类或
列举本身。[示例:
//错误:重新定义
这是你的例子
class complex { /* ... */ };
typedef int complex; //
typedef int complex;
class complex { /* ... */ };