#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常量的完美匹配,这是错误消息告诉我的内容?
答案 0 :(得分:2)
int64_t
是某种预定义类型的typedef(即别名)。如果类型long long int
恰好是64位,则可以是long int
,int
,甚至是int
。
重载分辨率基于参数的类型,而不是其值或大小。即使long long
和int64_t
具有完全相同的大小和表示(他们很可能会这样做),它们仍然是不同的类型。 4LL
的类型为long long
; 可能与<{em>可能<或的类型与int64_t
相同。
如果您想put()
int64_t
值为4
,则需要确保您的参数类型正确。例如:
const int64_t arg = 4;
put(arg);
或
put(int64_t(4));