오버로드 된 함수가 있지만 테스트 코드에 오류가 발생합니다.오버로드 된 함수가 모호한 오류가 발생합니다.
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
}
왜 모두 (서명) 길이를 제외하고 노력하고 있습니다? 길이가 standard 인 경우 (적어도 다른 모든 유형과 유사) 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) { }
삽입함으로써이 문제를 방지 할 수있다. 나는이 캐스트가 왜 작동하지 않는지를 알고 싶다.
1) 확실히 표준이 아닙니다. [이것을보십시오] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3485.pdf). 2) 표 아래의 메모를 읽지 않았습니다. 공식적으로 적어도 32 비트입니다. – chris
@CaptainObvlious 나는 그것을 시도했지만 또한 작동하지 않습니다. – user1810087