看看下面的代码片段:
#include <iostream>
#include <cstdint>
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;
int main(int argc, char** argv)
{
constexpr uint16_t b = 2;
constexpr uint16_t c = 3;
constexpr const auto bc = b * c;
std::cout << "b: " << type_id_with_cvr<decltype(b)>().pretty_name() << std::endl;
std::cout << "b * c: " << type_id_with_cvr<decltype(bc)>().pretty_name() << std::endl;
}
结果如下:
b: unsigned short const
b * c: int const
为什么将两个不带整数的整数相乘会得到一个整数?
编译器:g ++ 5.4.0
答案 0 :(得分:2)
unsigned short
的值在乘法之前隐式转换为int
。
short
和char
被视为“存储类型”,并在执行计算前隐式转换为int
。这就是原因
unsigned char x = 255, y = 1;
printf("%i\n", x+y); // you get 256, not 0