关于VC6不能定义long long类型

一、VC6是否支持long long类型? 

    VC6不直接支持long long类型, 这是因为在这个版本的编译器中, 他并未完全遵循C99或者更新的标准, 而long long类型是在C99标准中引入的

    但是, 如果我们想使用64位数据怎么办呢? VC6提供了一个等效的64位整数类型"__int64", 你可以使用这个类型来代替long long

二、关于输出__int64变量报"operator << ambiguous"错误

    在VC6中, "__int64"类型的数值默认不支持通过"<<"操作符进行输出操作. 这是因为VC6的标准库没有定义"<<"操作符对"__int64"类型的重载, 因此当你尝试使用"<<"操作符输出"__int64"类型的数值时, 编译器不知道应该使用哪个版本的"<<"操作符, 所以会产生"ambiguous"的错误. 

    解决这种问题的一种方法是将"__int64"类型的数值显式转化为"long"类型 (如果数值的大小在"long"类型范围内), 然后再进行输出操作

__int64 tmp = 1234;
std::cout << static_cast<long>(tmp) << std::endl;

    另一种方法是为"__int64"类型定义一个"<<"操作符的重载 (后面学到对象时会学到)

std::ostream& operator<<(std::ostream& os, __int64 val) {
    char buffer[20];
    sprintf(buffer, "%I64d", val);
    os << buffer;
    return os;
}

    这个"<<"操作符的重载版本会将"__int64"类型的数值转换为字符串, 然后输出这个字符串. 这样, 当你使用"<<"操作符输出"__int64"类型的数值时, 编译器就会使用这个重载版本, 而不会产生"ambiguous"错误

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值