gpt4 book ai didi

c++ - 类型转换在两种情况下的工作方式不同

转载 作者:行者123 更新时间:2023-11-28 04:20:38 26 4
gpt4 key购买 nike

我有一个 EDSobject 类:

class EDSobject
{
public:
...

int index;
int subindex;
std::string parameter;
std::string dataType;
int value;
};

在我的代码中,我将此类的对象写入字符串流文件:

if (obj.dataType == "0x0002" || obj.dataType == "0x0003" || obj.dataType 
== "0x0004") //signed data types
{
file << " 0x" << obj.subindex << " " <<
obj.parameter << " = " << dec << (int16_t)obj.value << endl;
}
else //unsigned data types
{
file << " 0x" << obj.subindex << " " <<
obj.parameter << " = " << dec << obj.value << endl;
}

您可以看到,如果 dataType 是“2”、“3”或“4”,我将 value 转换为有符号整数(obj.value 中的值是无符号整数)。这工作正常。例如,我从 64150 得到 -1386。

问题是当我试图只用转换来做到这一点时,就像这样:

void EDScastAllValues()
{
for (EDSobject obj : EDScontainer)
{
if (obj.dataType == "0x0002" || obj.dataType == "0x0003" ||
obj.dataType == "0x0004") //signed data types
{
int16_t newVal = static_cast<int16_t>(obj.value);
//or int16_t newVal = (int16_t)obj.value;
obj.value = newVal;
}
}
}

然后写相同的所有对象,没有 if 语句。

file << "    0x" << obj.subindex << " " << obj.parameter << " = " << dec << obj.value << endl;

在这里,obj.value 没有改变 - 64150 仍然是 64150。我没有像以前那样得到负值。

我在这里做错了什么?

编辑:忘记添加 EDSContainer 的定义。

set<EDSobject, cmp> EDScontainer;

最佳答案

您正在从容器中复制对象并修改拷贝。你想要:

for(auto& obj: EDSContainer)

关于c++ - 类型转换在两种情况下的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55515598/

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