为什么typedef不能用于静态?

sky*_*oor 21 c++

为什么typedef不能用于静态?例如,下面的代码是错误

typedef static int INT2;
Run Code Online (Sandbox Code Playgroud)

使用typedef应该遵循哪些其他规则?还有哪些其他关键字不能与typedef一起使用?

非常感谢!

Joh*_*ler 34

typedef不声明变量的实例,它声明了一个类型(实际上是类型别名),

static是应用于实例的限定符,而不是类型,因此在使用类型时可以使用静态,但在定义类型时则不能.像这样..

typedef int int32;
static int32 foo;
Run Code Online (Sandbox Code Playgroud)

  • `static`不是限定符,而是*存储类说明符*.因此,它不像"const"这样的限定符"类型的一部分",例如`typedef const int ci; ci x = 42;`(具有不同限定符的类型仍然是相同的类型,但可能不兼容). (3认同)

wic*_*ich 20

static关键字是不是类型的一部分,这取决于上下文它是一个存储或范围的说明符,并且具有任何的类型没有影响.因此,它不能用作类型定义的一部分,这就是它在这里无效的原因.

typedef是一个类型定义,即你说'this name'现在引用'this type',你给出的名称必须是语言标准定义的标识符,类型必须是类型说明符,即已命名类型,基本类型或typedef'd,结构,联合,类或枚举说明符,可能的类型限定符,即const或volatile.

然而,static关键字不会更改类型,它会说明对象的内容(通常,不是在OOP意义上).例如,它是放在静态存储中的变量,而不是类型.

看起来你正在尝试使用typedef作为宏,即

#define MYINT static int
Run Code Online (Sandbox Code Playgroud)


dir*_*tly 7

存储持续时间与对象相关联.typedef声明创建别名 - 类型的新名称.它不会创建对象.因此,您不能将存储说明符与typedef一起使用.


Shu*_*tal 5

typedef不能与 一起使用,static因为 和typedef都是static存储类。如果将变量定义为,typedef static int a;则该变量存在多个存储类a

存储类用于定义变量和/或函数的范围(可见性)和生命周期。一些例子是staticautoregisterexterntypedef