是否有任何方法可以在初始化之前更改变量的类型,您可以用示例解释

Is there any way to change the type of the variable before initialization can you explain with an example?

本文关键字:类型 解释 变量 方法 任何 初始化 是否 改变      更新时间:2023-10-16
int element;                
(float)element;
cout << typeid(element).name() << endl;

有关:

int element;                
(float)element;
cout << typeid(element).name() << endl;

int element;告诉编译器与sizeof (int)分配存储(并将其与符号element相关联)。

此外,它还记得(在编译时间)的类型(在编译时),以进一步使用该变量(作为表达式)。

(float)element;告诉编译器访问变量element(它是类型int),并将其值转换为float(无需进一步处理)。这是从element而非element S存储或类型中读取的临时值的转换。&ndash;element仍然是int类型。


回答(一部分)问题

是否有任何方法可以更改变量的类型

否。不允许这样更改变量的类型。

涉及XY问题(由Molbdnilo怀疑):

可以使用new的动态分配为变量"按需"(在运行时)提供存储。但是,实际上直接不建议使用new。使用new分配某些内容也应在不再需要内存时稍后再进行delete。正确处理delete(禁止使用Double delete,但delete co_18的某些东西会导致记忆裂缝),并不容易维护。

请注意,本地变量(如果未声明为staticextern)具有终身时间,该终身时间不在输入范围之前,并且在剩余范围时结束。因此,对于替代类型的共享存储是否完全值得怀疑。相反,只能使用各自的替代局部变量。

但是,可以使用unionstd::variant(自C 17)提供可能的替代类型(仅在时间时使用一种)。

std::variant的样本:

#include <cassert>
#include <iostream>
#include <variant>
typedef std::variant<int, float> IntOrFloat;
void print(IntOrFloat value)
{
  std::cout << "value: ";
  if (std::holds_alternative<int>(value)) {
    std::cout << std::get<int>(value) << " (int)n";
  } else if (std::holds_alternative<float>(value)) {
    std::cout << std::get<float>(value) << " (float)n";
  }
}
int main()
{
  IntOrFloat value = 123; // now it's an int
  print(value);
  value = 1.23f; // now it's a float
  print(value);
  return 0;
}

输出:

value: 123 (int)
value: 1.23 (float)

coliru

实时演示