C++相同的变量充当int和float
C++ same variable act as int and float
我有一个情况,我需要保持值float和int。所以如下所示。但无济于事。有人能帮上忙吗?
union Val {
int a;
float b;
};
Val p;
p.b = 45.56;
int k = p.a; // i want k should be 45;
我看到你说:
我不想每次都把它从float转换成int〔原文如此〕
要做到这一点,您可以使用用户定义的转换来实现这一点。
所以你的结构看起来像这样:
class Val {
int a;
float b;
public:
Val& operator= (const int _a) {a = _a; b = _a + fmod(b, 1.0F); return *this;}
Val& operator= (const float _b) {b = _b; a = trunc(_b); return *this;}
operator int() {return a;}
operator float() {return b;}
};
请注意,您真正想要使用的只是float
和static_cast<int>
对于static_cast
:
在运行时不会执行任何检查,以确保转换的对象实际上是目标类型的完整对象。因此,由程序员来确保转换是安全的。另一方面,它不产生
dynamic_cast
的类型安全检查的开销。
我在这里提供了一个使用Val
的示例:http://ideone.com/XUesib但如果float foo
是这样的,你可以完成完全相同的事情:
foo = 1.3F;
cout << static_cast<int>(foo) << endl << foo << endl;
foo = 13 + fmod(foo, 1.0F);
cout << static_cast<int>(foo) << endl << foo << endl;
我遇到了这样的情况,我需要保持值的浮动和int。所以试着低于
你不能用工会来做这件事。联合在任何时候都只能在内部包含一个值。您需要两个独立的变量。如果你喜欢的话,你可以把它们放在结构的一边:
struct Val {
int a;
float b;
};
现在您可以同时拥有int和float。
Val p;
p.b = 45.56;
p.a = p.b;
int k = p.a; // no conversion
也就是说,由于您显然只使用a
来存储b
的转换值,因此您应该衡量转换是否会影响性能。
您可以将结构与构造函数一起使用,并根据需要初始化其中的变量。
struct Val {
int a;
float b;
Val(float value) {
a = b = value;
}
};
因此,您可以在循环中使用它,而不必担心每次的对话,只需在循环外创建Val
变量并使用它即可。
相关文章:
- 没有从阵列<float>到阵列<int>的可行转换
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 如何将 qml 的文本转换为 float 和 int
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 如何使用 std:from_chars 在 C++17 中从字符串转换为 int/float
- 如何修复 E2015 "ambiguity between pow(double,double) and pow(float,int)"
- C++优化从 int 到 float 的数组转换
- 如何在 c++ 中将数据从文件读取到 int/float 值
- 错误:二进制'operator*' 'int [1]'和'float'类型的操作数无效
- 功能使用INT和Float类型作为C 中的参数过载
- 内部字符串/字符如何在 int 和 float 中存储
- 无法将'int*'转换为参数'1'的'float*'
- 将 python list 作为 'float*' 或 'int*' 传递给 C/C++
- 在C++/Visual Studio中,通过给定数据格式(doubles、float、int、1位bools)的UDP发
- 当float转换为int时,此代码中是如何/为什么进行缩小的
- C++ 将字符串转换为 16 位无符号/有符号的 int/float
- C++:int*/float*到char*,为什么使用repret_cast会得到不同的结果
- 如何在等待用户输入int, float或其他类型时拒绝输入char/string