C++. Можно ли сделать это?C++. можно сделать это, не получив ошибки: 'не был объявлен в этой области'
if (x>3)
int foo=10
else
long foo=10
без получения ошибки:
was not declared in this scope
C++. Можно ли сделать это?C++. можно сделать это, не получив ошибки: 'не был объявлен в этой области'
if (x>3)
int foo=10
else
long foo=10
без получения ошибки:
was not declared in this scope
Да, вы можете, используя std::variant
C++17 или boost::variant
.
std::variant<int, long> foo;
if(x > 3)
foo = 10;
else
foo = long(10);
И тогда доступ foo
так:
if(auto value = std::get_if<int>(&foo))
std::cout << "foo is int: " << *value << '\n';
else {
long value = std::get<long>(foo);
std::cout << "foo is long: " << value << '\n';
}
Я не знаю, почему вы хотели бы сделать это, хотя. A long
будет иметь возможность хранить все значения int
, поэтому вы можете просто сделать foo
типа long
и вообще избежать std::variant
. не
Хороший ответ, узнал что-то. Не совсем то, что он спрашивает, но, вероятно, что он имел в виду. – kabanus
нет вы не можете, потому что переменная x
является областью видимости внутри, если блок, так что вы не можете видеть его снаружи:
int main()
{
if(!x)
int value = 100;
else
double value = 5.57;
cout << value << endl; // values is scoped to if statement or else's so it will be destructed
// this example is like what you have above
for(;;)
{
int a = 77;
if(a)
break;
}
cout << a << endl; // error a is undeclared identifier
return 0;
}
Что вы пытаетесь сделать? Есть конкретная проблема? – DeiDei
Пожалуйста, покажите код, генерирующий эту ошибку. – ChiefTwoPencils
Вы ** не можете ** делать то, что предлагаете. Объем переменных - это 'if' и' else' соответственно. Переменные строго типизированы в каждой области на C++ - вы пытаетесь это сломать. Вероятно, это вопрос [xy] (http://mywiki.wooledge.org/XyProblem). – kabanus