Mar*_*n K 32 c++ enums static visual-studio
我最近遇到过这个:
static enum Response{
NO_ERROR=0,
MISSING_DESCRIPTOR,
...
};
Run Code Online (Sandbox Code Playgroud)
它在Microsoft VS2005下编译和工作.但是,我不确定'静态'修饰符应该做什么.它与以下有何不同?
enum Response {
NO_ERROR=0,
MISSING_DESCRIPTOR,
...
};
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 57
删除省略号的确切代码不是有效的C++.您不能static
在enum
声明中使用存储类说明符; 它没有任何意义(只能声明对象,函数和匿名联合static
).
但是,您可以enum
在一个声明中声明一个和一个变量:
static enum Response {
NO_ERROR = 0,
MISSING_DESCRIPTOR
} x;
Run Code Online (Sandbox Code Playgroud)
在static
这里适用于x
和你说,这实际上是相同的:
enum Response {
NO_ERROR = 0,
MISSING_DESCRIPTOR
};
static Response x;
Run Code Online (Sandbox Code Playgroud)
Gra*_*amS 14
令人惊讶的是,你也可以在其中放置其他的decl-specifiers.
这在VS2008中编译得很好:
auto const enum TestEnum {
Why,
Does
};
register volatile enum TestEnum2 {
This,
Work
};
Run Code Online (Sandbox Code Playgroud)
但它完全没有意义:)
我怀疑这里的问题是解析,因为这样的代码:
enum TestEnum3 { Hello, World }; // Define enum
enum TestEnum3 x = World; // Use enum
Run Code Online (Sandbox Code Playgroud)
也可以写成:
enum TestEnum3 { Hello, World } x = World; // Define and use enum.
Run Code Online (Sandbox Code Playgroud)
有趣的是,我注意到你是否在VS2008中这样做:
enum TestEnum3 { Hello, World };
const enum TestEnum3 e3 = World;
const enum TestEnum4 { F, M, L } e4 = F;
e3 = Hello; // error C2166: l-value specifies const object (Good!)
e4 = M; // NO ERROR here though - why?
Run Code Online (Sandbox Code Playgroud)
因此它们不等同于TestEnum4
它似乎丢弃了const
decl-specifier的情况.一切都很奇怪.
static enum Response { /*... */ };
Run Code Online (Sandbox Code Playgroud)
您无法static
在C++中定义枚举. static
只能是枚举的变量,而不是类型本身!
使用GCC
版本编译代码时4.3.4
,会出现以下错误:
prog.cpp:7:错误:只能为对象和函数指定存储类
在ideone上在线查看:http://www.ideone.com/cI1bt
我认为这一切都说.
-
但是,如果要限制其自己的转换单元中的类型 enum Response
,则可以使用未命名的命名空间.看看这个主题:
归档时间: |
|
查看次数: |
41735 次 |
最近记录: |