Edw*_*nge 27 c++ visual-studio-2010 c++11
在http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx上有一个表格,显示了C++ 0x的功能这是在2010年RC实施的.其中列出了转发枚举和强类型枚举,但它们被列为"部分".该文章的主要内容表明,这意味着它们要么不完整,要么以某种非标准的方式实施.
所以我有VS2010RC并正在玩C++ 0x功能.我无法解决这些问题,也无法找到有关这两个功能的任何文档.甚至最简单的尝试都没有编译.
enum class E { test };
int main() {}
fails with:
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2332: 'enum' : missing tag name
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2236: unexpected 'class' 'E'. Did you forget a ';'?
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C3381: 'E' : assembly access specifiers are only available in code compiled with a /clr option
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C2143: syntax error : missing ';' before '}'
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(518): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
int main()
{
enum E : short;
}
Fails with:
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(513): warning C4480: nonstandard extension used: specifying underlying type for enum 'main::E'
1>e:\dev_workspace\experimental\2010_feature_assessment\2010_feature_assessment\main.cpp(513): error C2059: syntax error : ';'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
因此,它似乎必须是一些完全非标准的实现,这使得他们能够证明"部分"完成调用此功能的合理性.如何重写该代码以访问转发和强类型功能?
有关我正在尝试使用的新功能的一些进一步信息:
强类型枚举:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
枚举的前向声明:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
Edw*_*nge 28
我想我找到了答案.我在关键字文档下的VS 2010文档中找到了"枚举类".它只是托管 - 在真正的C++版本中不受支持.因此,它们似乎意味着这个C++ 0x功能"部分完成",因为它根本没有完成.
我也想知道这个,但我的猜测是他们只是在他们的编译器中使用现有的非标准扩展.
VC10(及更早版本)接受如下代码:
enum E : short { test };
E val = E::test;
Run Code Online (Sandbox Code Playgroud)
也就是说,您可以使用枚举名称作为命名空间限定符,并且您可以指定类型.
对于前向声明的枚举,以下编译对我来说很好:
enum E;
Run Code Online (Sandbox Code Playgroud)
没有类型说明符
| 归档时间: |
|
| 查看次数: |
9451 次 |
| 最近记录: |