#include <stdint.h>
class Something { ...
void put(int32_t value, int32_t scale = 0);
void put(int64_t value, int32_t scale = 0);
void put(bool value);
};
调用something.put(4LL)
是模棱两可的。 int64_t 是如何定义的,以便它不是 long long int 常量的完美匹配,这是错误消息告诉我的?
最佳答案
int64_t
是某些预定义类型的 typedef(即别名)。如果 int
类型恰好是 64 位,它可以是 long long int
或 long int
,甚至是 int
.
重载解析基于参数的类型,而不是其值或大小。即使 long long
和 int64_t
具有完全相同的大小和表示形式(很可能如此),它们仍然是不同的类型。 4LL
的类型为 long long
; 可能与 int64_t
类型相同,也可能不同。
如果您想使用 int64_t
值为 4
调用 put()
,则需要确保您的参数为正确的类型。例如:
const int64_t arg = 4;
put(arg);
或
put(int64_t(4));
关于c++ - int64_t 的整数类型歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30901323/