c++ - 在 C++ 中使用浮点文字初始化整数数组的成员

标签 c++ arrays initializer-list

我有一个 32 位长整数数组。一些元素随后将用作 32 位 float 。我想提供一个初始化列表来正确初始化这些浮点值。例如,如果前两个元素用作整数,第三个元素用作 float ,我希望将第三个元素初始化为等于 100.0,我不得不这样做:

long a[3]={10,20,0x42c80000};

这工作正常,但不是很有表现力。

如果我这样做:

long a[3]={10,20,100.0};

编译器会将浮点字面量转换为 0x64。

我没有 C++11 编译器,因此无法使用 union 。

有什么想法吗?

最佳答案

union 不需要 C++11,所以请继续使用它们。但是,如果它们在语义上不属于一起,那么将不同类型的对象/元素混合在一个数据结构中通常不是一个好主意。

这将使您用于操作所述数据结构的代码变得脆弱且容易出错。我建议重新考虑您的语义并了解为什么您需要在同一个数组中同时使用 long 和 float。它们可以存储在单独的数据结构中。此外,float 可以准确地存储所有 long(尽管具有不同的按位表示),那么为什么不直接创建一个 float 数组呢?

关于c++ - 在 C++ 中使用浮点文字初始化整数数组的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345424/

相关文章:

c - 从数组中提取 UpperByte 和 LowerByte

python - 在 Python 中对多维列表进行深度排序的最有效/最干净的方法是什么?

c++ - std::vector 和 std::array 初始化列表之间的区别

c++ - 使用 istream_iterators 构造 vector

c++ - Eclipse CDT 无法构建 - 不确定出了什么问题(包括控制台)

php - mongodb - 在子数组中搜索,PHP

c++ - 初始化器列表和运算符的 RHS

c++ - 声明一个 constexpr initializer_list 对象是否合法?

c++ - 为什么通过 gSOAP 发送二进制数据太慢了?

c++ - 在 C++ 中迭代枚举类的常用方法是什么?