int64_t的整数类型不明确性

Integer type ambiguity for int64_t

本文关键字:类型 不明确 明确性 整数 int64      更新时间:2023-10-16
 #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使其不是长整型常量的完美匹配,这就是错误消息告诉我的?

int64_t是某些预定义类型的typedef(即别名)。 它可以是long long int,或者long int,甚至int如果类型int恰好是64位。

重载解析基于参数的类型,而不是其值或大小。即使long longint64_t具有完全相同的大小和表示形式(因为它们很可能如此),它们仍然是不同的类型。 4LL属于 long long 型;可能与int64_t的类型相同,也可能不同

如果要调用int64_t值为 4put(),则需要确保参数的类型正确。例如:

const int64_t arg = 4;
put(arg);

put(int64_t(4));