我有一些重载的功能,但在我的测试代码中产生了一些错误。
inline void tt(uint8_t& v) { }
inline void tt(int8_t& v) { }
inline void tt(char& v) { }
inline void tt(uint16_t& v) { }
inline void tt(int16_t& v) { }
inline void tt(uint32_t& v) { }
inline void tt(int32_t& v) { }
inline void tt(uint64_t& v) { }
inline void tt(int64_t& v) { }
int main(int argc, char* argv[]) {
unsigned char t1;
signed char t2;
unsigned short t3;
short t4;
unsigned int t5;
int t6;
unsigned long t7;
long t8;
char t9;
tt(t1); // ok
tt(t2); // ok
tt(t3); // ok
tt(t4); // ok
tt(t5); // ok
tt(t6); // ok
tt(t7); // error
tt(t8); // error
tt(t9); // ok
}
为什么除了(无符号)长之外的所有工作?看标准长至少(像所有其他类型一样)32位。
There are five standard signed integer types: “signed char”, “short int”, “int”, “long int”, and “long long int”. In this list, each type provides at least as much storage as those preceding it in the list.
我可以通过插入来避免这种情况
inline void tt(unsigned long int& v) { }
inline void tt(long int& v) { }
到代码。我只想知道为什么这个演员表不起作用。