社区
C语言
帖子详情
0.5是int型.还是float型
titicacahang
2007-08-20 05:40:50
void funtion(int)
void funtion(float)
这二个函数的时候。。
如果是funtion(0.5)时。。
那么编译器。会不知道取其中那一个的
在看高质量C.C++时...发现这个问题
虽然考的是隐式转换的问题..
但是我一直都认为0.5就是float型的.所以就是到void funtion(float)里..
但是高质量c.c++说.这里他会不知道到底取个???(不懂了)
请大家帮忙..分析..解答...谢谢
...全文
1180
17
打赏
收藏
0.5是int型.还是float型
void funtion(int) void funtion(float) 这二个函数的时候。。 如果是funtion(0.5)时。。 那么编译器。会不知道取其中那一个的 在看高质量C.C++时...发现这个问题 虽然考的是隐式转换的问题.. 但是我一直都认为0.5就是float型的.所以就是到void funtion(float)里.. 但是高质量c.c++说.这里他会不知道到底取个???(不懂了) 请大家帮忙..分析..解答...谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
蓝光芒
2007-08-21
打赏
举报
回复
牛人啊
ForestDB
2007-08-21
打赏
举报
回复
0.5 is double type.
ribut9225
2007-08-21
打赏
举报
回复
学习
星羽
2007-08-21
打赏
举报
回复
ambiguous call to overloaded function
jxlczjp77
2007-08-21
打赏
举报
回复
晕啊,我上面讲的有点问题,是这样
这个是定义:
================================
integral promotions:
整数类型提升是标准转换的一个子集,它将一个小的整数类型转提升为一个更大的整数类型。
================================
也就是A_B_C_ABC(黄瓜@YouCanDoIt)说的那个意思。
而这个是用来回答这个问题,整形提升用在函数类型匹配:
===================
其中所有比int小的整数类型如char, signed char, unsigned char, short, unsigned short,如果该类型所有的值都能被装到一个int里面则被转换为int,否则转换为unsigned int。
bool也是一个整数类型,所以也被转换为int,false转换为0, true转换为1
===================
jxlczjp77
2007-08-21
打赏
举报
回复
integral promotions:
整数类型提升是标准转换的一个子集,它将一个小的整数类型转提升为一个更大的整数类型。
其中所有比int小的整数类型如char, signed char, unsigned char, short, unsigned short,如果该类型所有的值都能被装到一个int里面则被转换为int,否则转换为unsigned int。
bool也是一个整数类型,所以也被转换为int,false转换为0, true转换为1
0黄瓜0
2007-08-21
打赏
举报
回复
类型提升指可以向一个方向自动转换,但反过来的转换是可能出差错的.比如char型可以转换为int型,int型可以转换为unsigned int型,但反过来可能造成数据丢失,编译器至少会给你一个警告. 当函数参数的匹配,两个都是向下转换,而不是提升则会出现不能决断(二义性)的错误.
char -> short -> int -> float -> double
| | |
|->unsigned char | |->unsigned int
|->unsigned short
loops
2007-08-21
打赏
举报
回复
类型提升是啥意思?
jxlczjp77
2007-08-21
打赏
举报
回复
==============================
楼上说的"而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
"该如何理解?
#include <iostream>
void fun(int) {}
void fun(float) {}
int main(int argc,char* argv[])
{
fun(0.5);
return 0;
}
可是有二义性错误的.
=======================
不好意思不好意思,太想当然了,这个确实有二义性。
C++ primer上关于参数匹配和转换应该是这个意思:
1. 精确匹配最优先
2. 通过类型提升次之
3. 通过标准转换匹配
4. 类类型转换
另外,没有任何一个标准转换比其他标准转换更好,而这里float到int为一个标准转换,而float到double也是一个标准转换,因此没有一个比另一个匹配更好,从而存在二义性。
基础还是不牢固啊,没有仔细看这一段,不过另一个例子是没有错的:
void f(unsigned short a);
void f(int a);
short m=0;
f(m);//会调用哪个f函数呢?答案是int版本
这里没有二义性,因为通过整型类型提升比标准转换有更好的匹配,short可以提升为int,也可以通过标准转换成为unsigned short,但Int是一个更好的匹配。
但是这样调用又会有二义性:
double m;
f(m); //二义性,没有一个标准转换比其他的标准转换更好
希望这次不会再错了,如果还有问题的话请指出,希望不要误导大家...
titicacahang
2007-08-21
打赏
举报
回复
谢谢大家的回复呀....想不到..竟然引起这么大的讨论..呵呵.
谢谢...现在知道了...
lkldiy
2007-08-21
打赏
举报
回复
double
iamliadai
2007-08-20
打赏
举报
回复
写出这样代码的人 ,估计早被公司开除了
a013231
2007-08-20
打赏
举报
回复
楼上说的"而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
"该如何理解?
#include <iostream>
void fun(int) {}
void fun(float) {}
int main(int argc,char* argv[])
{
fun(0.5);
return 0;
}
可是有二义性错误的.
jxlczjp77
2007-08-20
打赏
举报
回复
对于C++,整数字面值默认为int,浮点字面值默认为double
而对于函数参数匹配,在同样需要转化的情况下,认为int转化最优
void funtion(int)
void funtion(float)
function(0.5);
0.5是douoble型,而double既可以转化为int,又可转化为float,但默认为int匹配是最好的。
再来个更迷惑人的:
void f(unsigned short a);
void f(int a);
short m=0;
f(m);//会调用哪个f函数呢?
答案是void f(int a)这个版本,和上面同样的原因,因为short可以转化到unsigned short以及int,但认为int最优
a013231
2007-08-20
打赏
举报
回复
...
0.5是double型的呀.
或者要转成int型,或者要转成float型,所以不知道到底要取哪个.
titicacahang
2007-08-20
打赏
举报
回复
你的意思是
0.5如果在做参数时.会隐式转换成 float或是double??
0.5f时..这个已经是float类型了...
0.5转换成 int的解释呢??
我啃
2007-08-20
打赏
举报
回复
0.5->double
0.5f->float
6->int
String转
int
本套视频详细讲解了String如何转换成
int
,这在开发实践中会频繁遇到。
int
类
型
需要从文本框录入,如学生身高,服务器接收到的是String类
型
,使用时需要转换成
int
类
型
。 类
型
转换时需要使用到包装类的方法,8种基本...
1.浮点数(
float
)与整
型
数(
int
)的转换
1.浮点数(
float
/double)转整
型
数(
int
)————向零舍入 假设定义
float
a=1.3,b=1.6,c=2.0;
int
aa,bb,cc; 使用强制转换 aa=(
int
)a;bb=(
int
)b;cc=(
int
)c; 结果aa=1;bb=1;cc=2; 在处理时为了四舍五入。aa=(
int
...
java
int
0.5
_java
int
转
float
精度缺失原因?
long的范围大于doublelong与
float
的丢失原理同下:1)小数转换成二进制:整数和小数分别转换。整数除以2,商继续除以2,得到0为止,将余数逆序排列。22 / 2 11 余011/2 5 余 15 /2 2 余 12 /2 1 余 01 /2 0 余 1所以...
设变量n为
float
类
型
,m为
int
类
型
,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五人运算的表达式是: A) n=(n*100+
0.5
)/100.0 B)m=n*100+
0.5
设变量n为
float
类
型
,m为
int
类
型
,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五人运算的表达式是: A) n=(n100+
0.5
)/100.0 B)m=n100+
0.5
,n= m/100.0 C) n=n*100+
0.5
/100.0 D)n=(n/100+
0.5
)*100.0 B
简单的一道,算术题,要求使用递归算法。求s=1+1+2*
0.5
+1+1+2*
0.5
+3+
0.5
+...+1+2*
0.5
+...+(n-1)*
0.5
+n*
0.5
简单的一道,算术题,要求使用递归算法。求s=1+1+2
0.5
+1+1+2
0.5
+3+
0.5
+…+1+2*
0.5
+…+(n-1)
0.5
+n
0.5
#include <...
float
fun(
int
n);
int
main() {
int
b = 0; pr
int
f("请输入n的值:\n"); sc...
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章