2015-06-17 39 views
2
#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 constant的完美匹配,这是错误消息告诉我的吗?int64_t的整数类型歧义

+2

也许'int64_t'是'long'。 – user2357112

+0

只是在这里猜测,但4LL仍然是4和4将适合32位或64位整数...可能是错误的,虽然 – Thomas

+0

@托马斯:重载分辨率的相关是类型,而不是价值。 '4LL','4L'和'4'都具有相同的数学值,但它们都是不同的类型。 –

回答

2

int64_t是某种预定义类型的typedef(即别名)。它可能是long long intlong int,或者甚至int,如果类型int碰巧是64位。

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

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

const int64_t arg = 4; 
put(arg); 

put(int64_t(4));