任何人都可以解释,为什么
#include <iostream>
#include <type_traits>
using namespace std;
enum E : signed int { a=-1, b = 1,};
int main() {
std::cout << std::boolalpha;
cout << "strong typed enum E:int should be signed, but is_signed returns "
<< is_signed<E>() << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
std :: is_signed <>不行,它在锡上说的是什么?谢谢...
如果我们查看is_signed的文档,它会说:
如果T是带符号的算术类型,则提供成员常量值等于true.对于任何其他类型,值为false.
并且枚举不是算术类型,因此结果应该是假的.从草案C++ 11标准部分3.9.1
基本类型[basic.fundamental]:
[...]积分和浮动类型统称为算术类型[...]
您可以使用std :: underlying_type获取枚举的基础类型,然后应用于std::is_signed
该类型.
归档时间: |
|
查看次数: |
334 次 |
最近记录: |