Требуется некоторое объяснение относительно области действия моей переменной - PullRequest
1 голос
/ 09 ноября 2011
/* simple class that has a vector of ints within it */
class A
{
public:
   vector<int> int_list;
};

/* some function that just returns an int, defined elsewhere */
int foo();

/* I want to fill the object's int_list up */
A a_obj;

int main() {
   for (int i = 0; i < 10; i++) {
      int num = foo();
      a_obj.int_list.push_back( num );
   }
}

Ограничена ли область действия num циклом for?Будет ли он уничтожен после выхода из цикла for?Если я попытаюсь получить доступ к номерам в a_obj int_list, я не смогу, так как числа внутри будут уничтожены?

Ответы [ 4 ]

5 голосов
/ 09 ноября 2011

Ограничена ли область действия num циклом for?

Да

Будет ли он уничтожен после выхода из цикла for?

Он будет уничтожен после каждой итерации, а затем снова создан для следующей!

Если я попытаюсь получить доступ к номерам в a_obj int_list, я не смогу, так как числа внутри будут уничтожены?

Контейнеры хранят копии, так что вам не нужно об этом беспокоиться.

Подобные проблемы возникают только при наличии ссылок и указателей.

1 голос
/ 09 ноября 2011

Ограничена ли область действия num циклом for?Будет ли он уничтожен после выхода из цикла for?

Да, поскольку num является локальным для цикла for.

Если я попытаюсь получить доступ к номерам вint_list a_obj я не смогу, так как числа внутри будут уничтожены?

Нет, числа внутри списка не будут уничтожены при выходе из цикла for, потому что вы копируетеномера в списке и A a_obj; объявлен в глобальной области видимости, что означает, что он будет уничтожен в конце вашей программы.

0 голосов
/ 09 ноября 2011

да, каждый раз, когда цикл for повторяется, он создает новый экземпляр num в стеке.но вы передаете значение num в int_list, где оно будет храниться до тех пор, пока a_obj не выйдет из области видимости

0 голосов
/ 09 ноября 2011

Да, переменные, определенные в цикле, или любой блок { ... } будут существовать только внутри этого блока и будут уничтожены при выходе из блока.

В случае циклов блок будет«создал» каждую итерацию, поэтому в вашем примере на num нельзя ссылаться из предыдущих итераций.

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