c++ - int64_t 的整数类型歧义

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

最佳答案

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

重载解析基于参数的类型,而不是其值或大小。即使 long longint64_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/

相关文章:

C++ 在循环中创建和收集结构

c++ - 类方法上的 const 编译错误

c++ - 这就是 C++ 11 中的移动构造函数有意义的原因吗?

c++ - 如何从 JUCE Demo Audio Plugin Host 访问音频数据?

c++ - 类无法使用 C++ 中的静态变量

c++ - 使用 gcc 构建共享库

c++ - gcc 编译无效的 C 代码

c++ - 从使用概念定义的函数返回新对象

c++ - 编译错误c++(需要替换),线程有问题吗?

c++ - 如何运行 GCC/Clang 进行静态分析? (仅警告)