我有这个:
std::uint32_t data[6];
std::map<std::string, std::variant<int, float, std::string, std::uint32_t> map_;
map_["data0"] = data[0] ? data[0] : 0;
map_["data1"] = data[1] ? data[1] : 0;
map_["data2"] = data[2] ? data[2] : 0;
map_["data3"] = data[3] ? data[3] : 0;
map_["data4"] = data[4] ? data[4] : 0;
map_["data5"] = data[5] ? data[5] : 0;
Run Code Online (Sandbox Code Playgroud)
的想法map_["data0"] = data[0] ? data[0] : 0;是查看是否已设置任何值data[0](如果未设置)0。
然而这不能正常工作。即使data[0]未设置,它也不会返回“0”。
知道如何检查特定索引处的数组是否已std::uint32_t“初始化”或设置吗?
无法检查整数类型是否已初始化。整数不是指针,也不像指针,不能为空。未初始化的整数具有无法检查的不确定值,并且与 null 的概念不同。
您需要以某种方式自己跟踪每个元素是否具有值。
可能的解决方案包括:
使用哨兵值。例如,您可以确定最大可表示值意味着“无值”,并将所有元素初始化为该值。
使用标志。您可以创建另一个数组 ofbool或 a
std::bitset来跟踪哪个元素具有值。
使用可以编码更多信息的不同类型,例如
std::optional<std::uint32_t> data[6];.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |