在c++中使用浮点字面值初始化整型数组的成员
Initializing a member of an integer array with a floating point literal in C++
我有一个32位长整数数组。之后,其中一些元素将被用作32位浮点数。我想提供一个初始化列表来正确初始化这些浮点值。例如,如果前两个元素用作整数,第三个元素用作浮点数,并且我希望将第三个元素初始化为等于100.0,则必须这样做:
long a[3]={10,20,0x42c80000};
这个可以正常工作,但是不是很有表现力。
如果我这样做:
long a[3]={10,20,100.0};
编译器将浮点字面值转换为0x64。
我没有c++ 11编译器,所以使用联合是行不通的。
任何想法?
union不需要c++ 11,所以继续使用它们吧。但是,如果不同类型的对象/元素在语义上不属于一起,那么在单个数据结构中混合它们通常不是一个好主意。
它将使您用于操作所述数据结构的代码脆弱且容易出错。我建议重新考虑你的语义,看看为什么你需要长和浮点数在同一个数组。它们可以存储在单独的数据结构中。此外,浮点数可以准确地存储所有的long(尽管使用不同的位表示),所以为什么不直接创建一个浮点数数组来开始呢?
当你将它赋值给长数组时,它将进行隐式转换。如果你想将字节值存储在变量中,你可以使用memcpy
long toLongRepresantation(float f)
{
long ret;
memcpy(&ret,&f,sizeof(long));
return ret;
}
你也可以创建这个模板,但你应该确保这两个类型的大小是相同的
为什么不使用struct或class呢?
struck a
{
int iValue1;
float fValue1;
double dValue1;
char cValue1;
int iValue2[10]; // array of ints
float fValue2[5 ]; // array of floats
// ...
};
相关文章:
- 直接初始化无符号短整型的标准行为
- 类型为"短整型 (&)"的引用初始化无效
- 用整数值初始化非常量参考
- 模板类 + 委派构造函数 = 字段未初始化?(叮叮当当整)
- C++ 非整型模板 Const 初始化 预期在类名之前使用初始化声明符
- 整型非类型参数和非整型非类型参数的模板部分特化,g++和clang的区别
- C++:如何初始化不是整型的静态成员变量
- 如何使用整数值中的数字符号初始化字符数组
- C++-14 使用enable_if_t在整型上选择类模板化的成员函数
- 错误:非整型 'const char[]' 的静态数据成员的类内初始化无效
- 为什么在类中初始化的非整型静态数据成员必须是 constexpr
- 初始化时无法将长整型*转换为双精度*
- 整型变量的奇数C/C++初始化语法
- 初始化类的静态const非整型数据成员
- 在c++中初始化整型列表
- 关于模板中泛型初始化的c++
- 由于头文件中无符号整型初始化,调试模式链接失败
- 在c++中使用浮点字面值初始化整型数组的成员
- Visual Studio 2013 CTP是否支持非整型的类内静态const初始化式?
- 初始化指向整型数组的指针