【发布时间】:2018-09-28 12:31:33
【问题描述】:
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;
}
这段代码编译得很好
【问题讨论】:
-
不幸的是,您无意中掉入了算术运算符使用的
int之外的陷阱。如果大小不是限制,我建议您为您的成员使用unsigned int或更大的类型。 -
可以考虑沿
st(unsigned short x,unsigned short y) : a(x+y),b(x-y) {}这一行添加一个构造函数 -
@user463035818 我猜发布的代码只是为了展示一个更一般的构造函数示例,即使用临时调用的构造函数(顺便说一下,OP 可以定义)。
标签: c++