struct st {
unsigned short a;
unsigned short b;
};
int main(){
unsigned short a(10), b(10);
st{ a + b, a - b };
return 0;
}
在初始化列表的行上出现错误:
错误C2397:从“ int”到“ unsigned short”的转换需要 缩小转化
因此,我相信已经隐式转换为'int'。我没有要求。我该如何防止它发生?
int main(){
unsigned short a(10), b(10), c;
c = a + b;
return 0;
}
尽管此代码编译良好 p>
答案 0 :(得分:5)
实际上a + b
是int
类型,因为unsigned short
是较窄的类型。
尽管有(定义的)溢出的可能,但要避免这种情况,您需要提供强制转换:
st{ (unsigned short)(a + b), (unsigned short)(a - b) };
,或者如果您想非常明确地使用static_cast
。如果您不喜欢重复输入类型(我属于此类),可以写
st{ static_cast<decltype(st.a)>(a + b), static_cast<decltype(st.b)>(a - b) }
向类添加构造函数是另一种选择。