- 主题:gcc这什么情况
虽然两个类型都是64位,不代表能自动转换。
换个平台尺寸可能就不一样了。
【 在 lwp 的大作中提到: 】
: candidate function not vi able: no known conversion from 'uint64_t *' (aka 'unsigned long *') to 'unsigned long long *' for 1st argument
: 难道不都是64位,在这抱怨啥?
: clang-tidy居然也报错
: ...................
--
FROM 114.93.144.*
知道也不能自说自话放过啊。
long和long long是不同类型,C++不能因为这个平台上刚好尺寸一样就允许程序员随意混着用。不然会乱套的。比如double和函数指针的大小一样,编译器总不能让程序员把1.0当一个函数指针调用吧。
【 在 lwp 的大作中提到: 】
: 但是我就是在这个平台上编的啊
: gcc自己不知道自己是啥平台吗,就是交叉编译也应该知道啊
--
FROM 114.93.144.*
char, short, long, long long 分别代表不同长度的整数类型。它们的长度可以重合,也可以不重合。
x86_64+linux平台上它们分别是1、2、8、8个字节。
x86_64+windows平台上它们则是1、2、4、8个字节。
你也完全可以设计一个平台,这四个类型都是1个字节。
long和long long就是本质不同的两个类型。模板匹配得两个都搞一遍。
【 在 lwp 的大作中提到: 】
: 不是,我不太理解为什么long和longlong在字长相同的情况下还是不同类型
: 如果我拿模板匹配,也会匹配出不同逻辑?
: 关键是这么搞的意义是什么啊,还有其它什么地方能体现这两种类型的区别
--
FROM 114.93.144.*
【 在 lwp 的大作中提到: 】
: 你说的这些我都知道
: 但我觉得在一个固定的硬软件平台上
: 在长度重叠的时候,两个类型随意替换没有什么问题啊
在C语言里没问题,C++里不可以这么写
: 如果非要说模板匹配会有问题,那指针cast应该没什么问题吧
--
FROM 114.93.144.*