【发布时间】:2017-04-20 22:10:52
【问题描述】:
C/C++中两个字符相乘的结果是什么类型?
unsigned char a = 70;
unsigned char b = 58;
cout << a*b << endl; // prints 4060, means no overflow
cout << (unsigned int)(unsigned char)(a*b) << endl; // prints 220, means overflow
我希望将 T 类型(例如,char、short、int)的两个数相乘的结果变为 T。对于 char,它似乎是 int,因为 sizeof(a*b) 是 4。
我写了一个简单的函数来检查乘法结果的大小:
template<class T>
void print_sizeof_mult(){
T a;
T b;
cout << sizeof(a*b) << endl;
}
print_sizeof_mult<char>()、print_sizeof_mult<short>() 和 print_sizeof_mult<int>() 是 4,print_sizeof_mult<long>() 是 8。
这些结果是否仅适用于我的特定编译器和机器架构?还是在某处记录了 C/C++ 中基本操作的输出是什么类型?
【问题讨论】:
-
如果
T的所有可能值都在int的范围内,则将两个T相乘的类型为int。 C++ 标准记录了这种行为。 C 和 C++ 是不同的语言,在 C 中,您的代码将左移一个名为cout的变量 -
@M.M:实际上,在 C 语言中,编译器会开始向
template<抱怨。
标签: c++ implicit-conversion integer-promotion