社区
C语言
帖子详情
##########这是不是C++Primer的一个错误##########
peter9606
2004-06-24 10:04:06
P387
在讲到参数类型转换的时候。
说到:枚举类型的实参被提升到下列第一个能够表示其所有枚举常量的类型:int,unsigned int,long 或unsigned long .
可是枚举常量中的内容能是int表示不了的么?
比如我这样定义 enum e {a,b,c=0x9999999999999};
事实上我这样定义肯定会被编译器检测出来有问题的。
不知道我的看法是否这正确
欢迎大家指正。
...全文
199
14
打赏
收藏
##########这是不是C++Primer的一个错误##########
P387 在讲到参数类型转换的时候。 说到:枚举类型的实参被提升到下列第一个能够表示其所有枚举常量的类型:int,unsigned int,long 或unsigned long . 可是枚举常量中的内容能是int表示不了的么? 比如我这样定义 enum e {a,b,c=0x9999999999999}; 事实上我这样定义肯定会被编译器检测出来有问题的。 不知道我的看法是否这正确 欢迎大家指正。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
peter9606
2004-06-26
打赏
举报
回复
hoho 多谢执教 好像明白了
mailxt
2004-06-25
打赏
举报
回复
你有病啊,不是告诉你0x9999999999999已经超出32位处理器的最大整数范围了吗,枚举类型的实参能提升到不支持的类型吗?
peter9606
2004-06-25
打赏
举报
回复
对。就是这个意思,既然都是这样了那 书上的说法就是错误的拉
:枚举类型的实参被提升到下列第一个能够表示其所有枚举常量的类型:int,unsigned int,long 或unsigned long .
qwertasdfg123
2004-06-25
打赏
举报
回复
编译器会产生一个警告
warning C4341: 'c' : signed value is out of range for enum constant
mailxt
2004-06-25
打赏
举报
回复
你不懂E文吗?
warning C4341: 'c' : signed value is out of range for enum constant
数值超出了枚举常量的范围,已经超出了可表示的值的范围了,int,unsigned int,long 或unsigned long在32位的Windows平台上都是4字节,表示的数值范围大小是一样的,你还让他往哪儿提升啊?只有在16为环境下int和long才不同,int是2字节,long是4字节。
xjp6688
2004-06-25
打赏
举报
回复
up
peter9606
2004-06-25
打赏
举报
回复
楼上没有看清楚我的问题么?
peter9606
2004-06-24
打赏
举报
回复
那按照书上说的应该自动转换为long 咯?
mailxt
2004-06-24
打赏
举报
回复
你用的是64位处理器吗?你把0x9999999999999数一数,32位处理器处理的数据int最大不过是0xffffffff,你的枚举常量大到编译器无法识别了当然会出错。
peter9606
2004-06-24
打赏
举报
回复
是不是偶的这个问题太简单了?
大家都不屑一顾呀?
郁闷。。。。
peter9606
2004-06-24
打赏
举报
回复
不好意思
上面的 最后一句 func(unsigned int i) 是多余的 应该去掉。
peter9606
2004-06-24
打赏
举报
回复
#include <iostream.h>
void func(char c){
cout << "func(char p)" << endl ;
}
void func(int i){
cout << "func(int i)" << endl ;
}
void func(unsigned int ui){
cout << "func(unsigned int i)" << endl ;
}
int main(){
enum e1{a,b,c=0x800000000000} ;
e1 enum1 = c ;
enum e2{a2,b2,c2=3} ;
e2 enum2 = a2 ;
func(enum1);
func(enum2);
getchar();
return 1;
}
比如这样的程序 在 Dev cpp下就不能通过编译。
在vc6下 也会有警告,而且输出的答案是:
func(int i) ----〉这里和预期的func(unsigned int i)显然不一样
func(int i)
func(unsigned int i)
mailxt
2004-06-24
打赏
举报
回复
在32位windows平台下long和int是一样的,都是32位
peter9606
2004-06-24
打赏
举报
回复
自己 up 一下
C++
Primer
习题集(第5版)
《
C++
Primer
》第五版是一本权威的
C++
编程教程,由Stanley B. Lippman、Josée Lajoie与Barbara E. Moo共同编著。本书旨在帮助读者深入理解
C++
语言的核心概念及其应用,并通过丰富的习题来巩固学习成果。 #### 核心...
C++
primer
第五版习题答案(完整版)
在
C++
中,`/*...*/`形式的注释不能嵌套,这意味着不能在
一个
`/*...*/`注释内部再包含另
一个
`/*...*/`注释。 示例中的代码包含了
一个
不正确的嵌套注释,编译器会报错,提示嵌套注释的问题。修正方法是确保所有的`/*....
c++
primer
笔记
根据给定的信息,“
c++
primer
笔记”主要围绕经典著作《
C++
Primer
》展开,这是一本深受程序员喜爱的书籍,旨在帮助读者系统地学习和掌握
C++
编程语言的基础及高级特性。下面将从几个关键方面对
C++
的核心知识点进行...
C++
Primer
读书笔记
- **存储单位与结构**:在比特级别上,存储器无结构,通过按块处理,如8位组成
一个
字节,32位构成
一个
字,赋予存储器结构。 - **无符号类型与溢出**:对于`unsigned`类型,编译器会调整超出范围的值,使其符合类型...
C++
Primer
中文 四版TXT版本
综上所述,《
C++
Primer
中文四版TXT版本》是一本全面介绍了
C++
语言的书籍,它不仅覆盖了语言的基础知识,还深入探讨了标准库的使用和高级语言特征的应用,非常适合初学者和有一定经验的程序员学习。
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章