Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么不允许从强类型枚举隐式转换为其基础类型? 让我们考虑下面的代码: #include <type_traits> enum class foo_bar : unsigned { foo, bar, }; int main() { foo_bar bar = foo_bar::bar; // unsigned a = bar; -- error: cannot convert ‘foo_bar’ to ‘unsigned int’ in initialization unsigned a = static_cast<std::underlying_type<foo_bar>::type>(bar); return 0; } #包括 枚举类foo_bar:未签名 { 福, 酒吧 }; int main() { foo_bar=foo_bar::bar; //unsigned a=bar;--错误:无法在初始化中将'foo_bar'转换为'unsigned int' 无符号a=静态_转换(条形); 返回0; }_C++_C++11_Enums - Fatal编程技术网

C++ 为什么不允许从强类型枚举隐式转换为其基础类型? 让我们考虑下面的代码: #include <type_traits> enum class foo_bar : unsigned { foo, bar, }; int main() { foo_bar bar = foo_bar::bar; // unsigned a = bar; -- error: cannot convert ‘foo_bar’ to ‘unsigned int’ in initialization unsigned a = static_cast<std::underlying_type<foo_bar>::type>(bar); return 0; } #包括 枚举类foo_bar:未签名 { 福, 酒吧 }; int main() { foo_bar=foo_bar::bar; //unsigned a=bar;--错误:无法在初始化中将'foo_bar'转换为'unsigned int' 无符号a=静态_转换(条形); 返回0; }

C++ 为什么不允许从强类型枚举隐式转换为其基础类型? 让我们考虑下面的代码: #include <type_traits> enum class foo_bar : unsigned { foo, bar, }; int main() { foo_bar bar = foo_bar::bar; // unsigned a = bar; -- error: cannot convert ‘foo_bar’ to ‘unsigned int’ in initialization unsigned a = static_cast<std::underlying_type<foo_bar>::type>(bar); return 0; } #包括 枚举类foo_bar:未签名 { 福, 酒吧 }; int main() { foo_bar=foo_bar::bar; //unsigned a=bar;--错误:无法在初始化中将'foo_bar'转换为'unsigned int' 无符号a=静态_转换(条形); 返回0; },c++,c++11,enums,C++,C++11,Enums,为什么不允许隐式转换?基础类型已知,a的类型与foo\u bar基础类型匹配。隐式转换似乎是安全的,并且可以在不丢失信息的情况下执行。为什么从语言设计的角度来看强制转换是必要的?从中,隐式积分提升的问题在于,您可以比较两个不同的枚举: enum Color { ClrRed, ClrOrange, ClrYellow, ClrGreen, ClrBlue, ClrViolet }; enum Alert { CndGreen, CndYellow, CndRed }; Color c = Clr

为什么不允许隐式转换?基础类型已知,
a
的类型与
foo\u bar
基础类型匹配。隐式转换似乎是安全的,并且可以在不丢失信息的情况下执行。为什么从语言设计的角度来看强制转换是必要的?

从中,隐式积分提升的问题在于,您可以比较两个不同的枚举:

enum Color { ClrRed, ClrOrange, ClrYellow, ClrGreen, ClrBlue, ClrViolet };
enum Alert { CndGreen, CndYellow, CndRed };
Color c = ClrGreen;
Alert a = CndGreen;
bool armWeapons = ( a >= c ); // compiles but does not make sense
要了解实际情况,可以使用以下结构模拟枚举类:

struct A {
    operator int() const {
        // for simplicity, just return fixed value
        return 1;
    }
};

struct B {
    operator int() const {
        return 2;
    }
};

A a;
B b;
int i = b; // ok
bool x = (a < b); // yay, this compiles

因为这就是关键所在?“我正在使用一个功能来阻止我执行X,我想知道–为什么我不能使用这个功能执行X?”“强类型”听起来它应该能解释为什么它是这样工作的。@ivaigult因为
enum class
es不是
unsigned
,而且它们用一个特定的整型表示的事实与我的重新表述无关。您正在使用一个提供强类型枚举的功能。你的问题是:“为什么我的枚举是强类型的”?
struct B {
    explicit operator int() const {
        return 2;
    }
};

A a;
B b;
bool x = (a < b); // finally does not work
int i = b; // but now this does not work without explicit cast either