使用if语句选择类型来声明变量C++
using an if statement to choose type to declare a variable C++
我正在引用一个函数中使用的变量,有时它可能是int,有时可能是float。我已经找到了一种方法来自动判断我希望变量是哪种类型(int或float),但我希望有一种方法声明该变量,以便以后引用时它将是正确的类型。我知道您可以将一种类型的变量强制转换为另一种类型,但似乎需要引入一个新的变量。
有什么想法吗?
这就是工会的作用。这里有一个例子:
union int_or_float
{
int i;
float f;
};
在你的功能中:
void function(int_or_float param, bool is_int)
{
if (is_int)
do_something_with_int(param.i);
else
do_something_with_float(param.f);
}
不要使用union
在任何情况下都将该变量设为double
。
典型的64位double
可以精确地表示所有32位int
值。
记住Donald Knuth;格言";过早优化是万恶之源";
此外,请记住Alexandrescu&Sutter,";不要;Don’不要为小事而烦恼“。
此外,请记住KISS原则,";保持简单,愚蠢";。
在Reddit人群因为答案中的消极性而开始投票之前,我应该更好地链接到维基百科上的百科全书,说同样的话,嘿,KISS。
使用并集。它感觉有点像一个结构,但它只容纳其中一个成员。例如,请参见:http://www.go4expert.com/forums/showthread.php?t=15.
这里有一个复杂的替代方案:
class Base { virtual ~Base() { } };
class Int : public Base { int a; };
class Float : public Base { float a; };
class Both {
public:
Base &choose(int i) {
switch(i) {
case 0: return my_int;
case 1: return my_float;
};
}
private:
Int my_int;
Float my_float;
};
然后是虚拟函数或dynamic_cast来对Base引用执行任何操作。
加法的好技巧是在它们之间添加转换:
void calc_int() {
my_int.a = (int)my_float.a;
}
void calc_float() {
my_float.a = (float)my_int.a;
}
然后这只是设置者的问题:
void set(int a) {
my_int.a = a;
calc_float();
}
void set(float a) {
my_float.a = a;
calc_int();
}
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]