С++: время жизни и области видимости переменных (помогите разобраться)

Модератор: Модераторы разделов

boot
Сообщения: 289

С++: время жизни и области видимости переменных

Сообщение boot »

Все наверное знают intuit.ru . Не получается у меня там пройти одну тему по сабжу(наверное, не только у меня). С одной стороны, тема в принципе не сложная, а сдать не получается. Думаю, может какая-нибудь ошибка проверки вариантов ответов... Просьба к разбирающимся в данной теме: я тут прикреплю текстовик с несколькими последними вариантами ответов, а вы скажете сколько там у меня ошибок. Буду действовать по ситуации, в зависимости от вашего диагноза :)
Заранее спасибо за помощь. Поставлю любое кол-во плюсов :)
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: С++: время жизни и области видимости переменных

Сообщение elide »

namespace a {
  int a;
  class A {
      public:  static int a;
  };
}
Какое будет значение атрибута a класса a после выполнения в функции main a::a = 4; ?
#4
0
не определено
namespace a {
  int a;
  enum AA { aa = 0; bb, cc };
  class A {
      public: static int a;
      static void init() { a = 4; }
  }
}
Какой будет результат выполнения в функции main после того, как будет выполнен метод init cout << a::a; ?
0
4
#не определено
afaik, в обоих случаях мы получим ошибку компиляции, потому как a::A::a объявлена, но нигде не определена. так что ой. к сожалению, проверить сейчас не могу.
слава роботам!
Спасибо сказали:
boot
Сообщения: 289

Re: С++: время жизни и области видимости переменных

Сообщение boot »

2elide:
Да, это ошибка. В первом печатает 4 как значение переменной int a в пространстве имен a, не атрибута класса(только при a::a=4;). Класса A нет, поэтому наверное это неккоректно поставленный вопрос.
Во втором явная ошибка : error: `init' is not a member of `a'. К тому же еще синтаксическая ошибка: AA { aa = 0; bb, cc }; вместо enum AA { aa = 0, bb, cc };

Получается, все остальные ответы правильные? Я так и думал, что это пройти невозможно из-за скорее всего ошибки сервера - получается как ни отвечай, всё неправильно.
Единственный вопрос, который ещё можно трактовать двояко это:

Код: Выделить всё

Объявление extern void f(int); означает:

  #  функция определена в другом исходном файле
      функция определена в другом исходном файле, или стандартной библиотеке
      функция может быть вызвана в любом другом исходном файле
      функция может быть вызвана только в другом исходном файле
      нет правильного ответа

если считать не синтаксис обьявления, то можно посчитать ошибкой второй вариант, т.к. никакой f() в станартной библиотеке нет.
Спасибо большое за помощь!
Спасибо сказали: