一、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"错误