【问题标题】:Integer type ambiguity for int64_t [duplicate]int64_t 的整数类型歧义[重复]
【发布时间】:2015-06-17 20:03:18
【问题描述】:
 #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_tlong
  • 这里只是猜测一下,但 4LL 仍然是 4,并且 4 将适合 32 位或 64 位整数...虽然可能是错误的
  • @Thomas:与重载决议相关的是类型,而不是值。 4LL4L4 都有相同的数学值,但它们都是不同的类型。
  • @KeithThompson 好的,这是有道理的,就像我说的不确定。有一段时间没有做任何硬核 C++ 编码了。我需要去买一本 c++11 的书,哈哈改变了很多
  • 我预计这是重复的,事实上,它是;我只是找不到自己。

标签: c++ gcc


【解决方案1】:

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

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

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

const int64_t arg = 4;
put(arg);

put(int64_t(4));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多