我很想知道关于类型之间的强制转换的标准(不是类)。
例如,
unsigned long long int ulli = std::numeric_limits<unsigned long long int>::max();
char c = static_cast<char>(ulli);
在我的编译器(VS2015)上,这甚至不会发出警告,(在这种情况下c = -1)。
但size of char
和size of unsigned long long int
不一样。这是个问题吗?这种行为是不确定的?
标准是否说明在您尝试将变量转换为较小变量的情况下会发生什么?
是否安全?
相反的情况呢,试图将较小的值转换为较大的值?
char c = std::numeric_limits<char>::max();
unsigned long long int ulli = static_cast<unsigned long long int>(c);
标准是否保证它能够正常工作,还是由编译器来保护开发人员?