mal*_*lat 4 c++ gcc language-lawyer c++11
我正在Scoped enumerations从这里阅读页面:
$ cat e.cxx \n#include <cstdint>\nenum class Handle : uint32_t { Invalid = 0 };\nint main()\n{\n Handle h { 42 }; // OK\n return 0;\n}\n$ g++ -std=c++11 e.cxx\ne.cxx: In function \xe2\x80\x98int main()\xe2\x80\x99:\ne.cxx:5:17: error: cannot convert \xe2\x80\x98int\xe2\x80\x99 to \xe2\x80\x98Handle\xe2\x80\x99 in initialization\n Handle h { 42 }; // OK\n\n ^\nRun Code Online (Sandbox Code Playgroud)\n\n使用:
\n\n$ g++ --version\ng++ (Debian 5.3.1-14) 5.3.1 20160409\nCopyright (C) 2015 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions. There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nRun Code Online (Sandbox Code Playgroud)\n\n如果我现在检查 GCC 中的 C++11 支持,看起来好像自GCC 4.8以来所有内容都受支持。
\n\n那么我读错哪一页了?的示例Score enumertions不是 100% 正确,或者 GCC 中对 C++11 的支持仍然不完整?
enum class(或enum struct) 创建强类型。它不能简单地使用底层整数类型进行初始化,它需要显式转换,至少在 C++11 和 C++14 中是这样。
您显示的参考屏幕截图来自即将推出的 C++17 标准,该标准稍微放宽了要求,并允许这种类型的初始化。
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |