int64_t的整数类型歧义

时间:2015-06-17 20:03:18

标签: c++ gcc

 #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常量的完美匹配,这是错误消息告诉我的内容?

1 个答案:

答案 0 :(得分:2)

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

重载分辨率基于参数的类型,而不是其值或大小。即使long longint64_t具有完全相同的大小和表示(他们很可能会这样做),它们仍然是不同的类型。 4LL的类型为long long; 可能与<{em>可能<或的类型与int64_t相同。

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

const int64_t arg = 4;
put(arg);

put(int64_t(4));