Если вы имеете в виду переменные, нет, нет. Когда вы создаете переменную, она привязывается к определенному типу и определенному местоположению. Сказав это, ничто не мешает вам повторно использовать одну и ту же переменную для двух разных вещей:
float f = 3.141592653589;
// do something with f while it's PI
f = 2.718281828459;
// now do something with f while it's E.
Вы можете использовать указатель, чтобы его можно было изменить, чтобы он указывал на другую переменную, но я подозреваю, что это не то, что вы спрашиваете. В любом случае, если вы не используете указатель void и приводите его, он все равно привязан к определенному типу:
float pi = 3.141592653589;
float e = 2.718281828459;
float *f = π
// do something with *f while it's PI
f = &e;
// now do something with *f while it's E.
Если то, что вы предлагаете, является чем-то вроде:
float f = 3.141592653589;
// do something with f while it's PI
forget f;
std::string f = "hello";
// do something with f while it's "hello"
forget f;
Я не уверен, что вижу смысл. Я думаю, что вы могли бы сделать это, поместив определения в новую область видимости (то есть в фигурные скобки):
{
float f = 3.141592653589;
// do something with f while it's PI
}
{
std::string f = "hello";
// do something with f while it's "hello"
}
но это не так, как если бы у нас была всемирная нехватка имен переменных. И, если вы правильно называете свои переменные, маловероятно, что строка и число с плавающей точкой будут иметь одинаковые имена (возможно, double и float, но это все еще сомнительная функция для добавления в язык).