还是C++枚举问题
enumds{x=1,z=2,z=4,e=8};dsd=ds(5);ds(5)是什么意思?怎么知道他的范围...
enum ds{x=1,z=2,z=4,e=8};
ds d=ds(5);
ds(5)是什么意思?怎么知道他的范围 展开
ds d=ds(5);
ds(5)是什么意思?怎么知道他的范围 展开
展开全部
这个写法有问题.
ds(5) 就是 (ds)5, 等价, 表示将int类型的5 "强制转换"为enum ds, 但是ds中其实没有5这个值, 虽然语法通, 但是会然别人很困惑.
楼主似乎不明白 枚举的含义.
enum ds{x=1, z=2, e=3 };
上面的枚举, 等价于以下定义
const int x = 1;
const int z = 2;
const int e = 3;
之所以要用枚举, 而不是直接定义const int是为了给用户选择范围.
如下2个函数.
int fun(int p) // 参数是int类型, 可以传入任何int值来调用fun, 比如说fun(999);
但是有的时候999这样的参数值没有意义, 我们希望用户在1,2,3中选一个作为参数.
int fun(ds p) // 参数是enum ds, 只可以是x, z, e中的一个.
fun(x) // ok 等价于 fun(1)
fun(e) // ok 等价于 fun(3)
fun(999) // 编译错误, 不可以把999当做ds
fun(3) // 也是错误, 虽然ds中有e = 3, 但是你只可以写e, 直接写3不可以.
fun((ds)3) // OK, 就是你问的那个, 强制类型转换, 强制让3符合enum ds
ds(5) 就是 (ds)5, 等价, 表示将int类型的5 "强制转换"为enum ds, 但是ds中其实没有5这个值, 虽然语法通, 但是会然别人很困惑.
楼主似乎不明白 枚举的含义.
enum ds{x=1, z=2, e=3 };
上面的枚举, 等价于以下定义
const int x = 1;
const int z = 2;
const int e = 3;
之所以要用枚举, 而不是直接定义const int是为了给用户选择范围.
如下2个函数.
int fun(int p) // 参数是int类型, 可以传入任何int值来调用fun, 比如说fun(999);
但是有的时候999这样的参数值没有意义, 我们希望用户在1,2,3中选一个作为参数.
int fun(ds p) // 参数是enum ds, 只可以是x, z, e中的一个.
fun(x) // ok 等价于 fun(1)
fun(e) // ok 等价于 fun(3)
fun(999) // 编译错误, 不可以把999当做ds
fun(3) // 也是错误, 虽然ds中有e = 3, 但是你只可以写e, 直接写3不可以.
fun((ds)3) // OK, 就是你问的那个, 强制类型转换, 强制让3符合enum ds
追问
我也是刚学C++,我是对这个'范围‘ 不明白,不理解这个范围是什么意思
因为在书上看到ds(5)可以,因为ds(5)是 ds类型而且在ds范围这内0:15
谢谢你这么细心为我解释枚举。
追答
enum ds{x=1,z=2,z=4,e=8};ds d=ds(5);
这个代码有2个问题.
1) 首先枚举中不允许名字重复, 你的z出现2次了, 虽然值不同
2) 5也不在这个枚举的范围中, 这个枚举只有 1, 2, 3, 8 四个值是合法的
enum Day {
monday = 1,
thseday = 2, wednesday = 3, thurday = 4, friday = 5, saturday = 6, Sunday = 7 }; 我定义一个枚举表示一个星期7天, 你给我个8明显是不合语法的吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询