gpt4 book ai didi

c++ - 缩小结构初始化的转换

转载 作者:搜寻专家 更新时间:2023-10-31 00:26:24 25 4
gpt4 key购买 nike

struct st {
unsigned short a;
unsigned short b;
};

int main(){
unsigned short a(10), b(10);

st{ a + b, a - b };

return 0;
}

在初始化列表的行上发出错误:

error C2397: conversion from 'int' to 'unsigned short' requires a narrowing conversion

所以我相信已经发生了到“int”的隐式转换。我没有要求它。我该怎么做才能防止它发生?

int main(){
unsigned short a(10), b(10), c;

c = a + b;

return 0;
}

虽然这段代码编译得很好

最佳答案

事实上 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) }

向您的类添加构造函数是另一种选择。

关于c++ - 缩小结构初始化的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52555412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com