Member 13999882 Ответов: 4

Можно ли объявить переменную внутри if statment ?


Я попытался объявить переменную внутри оператора if, но он говорит, что переменная не объявлена в области видимости

Что я уже пробовал:

#include<iostream>

using namespace std;
int main()
{
double y;
cout<<"enter y: ";

cin>>y;

if (x>10)
{
double x=y*15;
cout<<x;
return 0;
}

jeron1

x используется в самом операторе if, прежде чем он будет объявлен, возможно, это должно быть if (y > 10)?

Richard MacCutchan

Да, но она должна быть определена, прежде чем ее можно будет использовать.

4 Ответов

Рейтинг:
2

KarstenK

Да, это нормально в C++, но ваш x объявлен позже!!!

Но это в вашем коде имеет мало смысла.


Рейтинг:
2

OriginalGriff

Да, это нормально - вы можете объявить переменную в любом наборе фигурных скобок, и у нее есть свои преимущества, потому что переменная выходит из области действия в закрывающей скобке. И когда он выходит за рамки, на него нельзя ссылаться.

Так что если, например, у вас был указатель, который вы выделили памяти, использовали его, а затем освободили, объявив его в верхней части списка. if а освобождение памяти внизу означает, что вы не можете случайно использовать освобожденный указатель вне блока.

Ваш пример довольно тривиален, но да, это разрешено, и часто это хорошая идея!


Рейтинг:
2

Afzaal Ahmad Zeeshan

Да, но в вашем случае это не сработает. if блок сам по себе является областью, и вы определяете область, и переменные доступны только внутри области, а не снаружи, и не на границе.

Итак, я думаю, что то, что вы хотели бы сделать, было бы,

cin >> y;

if (y > 10)
{
   double x = y * 15;

Это будет работать, и будет проверить, если значение Y будет больше. Почему я думаю, что это был бы правильный подход? Потому что вы только что приняли участие в y переменная, и теперь вам нужно будет проверить, был ли ввод от пользователя больше 10.

В противном случае вы можете сделать это,
cin >> y;

double x = 0; // Initialized with 0, to avoid garbage, and to make my next sentence true
if (x > 10)
{
    // x has been already defined
    x = y * 15;

Но заметьте, что теперь ваш if блок никогда не будет выполнен, потому что он не будет больше 10 и, следовательно, если блок никогда не будет выполнен.

Сфера применения - cppreference.com[^]


Рейтинг:
2

Dave Kreskowiak

Конечно. Просто не ожидайте, что сможете использовать эту переменную вне if блок.

То, что вы видите, - это "сфера действия". Это понятие является видимостью для переменных и методов. Читайте об этом здесь: Область действия переменных и методов в Microsoft .NET[^].