Пожалуйста, помогите мне понять использование того же пространства имен в коде ниже - PullRequest
0 голосов
/ 04 октября 2019

Я использовал Code :: Blocks, чтобы найти ответ, и он дал мне 42, что означает B = 4 и A = 2;Я понимаю, почему A = 2, но я не знаю, почему B = 4, а не 5;Код на C ++ ниже:

#include <iostream>
using namespace std;

namespace S
{
   int A = 1;
}

namespace S
{
   int B = A + 2;
}

int main()
{
   S::A = S::A+1;

   {
      using namespace S;
      ++B;
   }

   cout << S::B << S::A;
}

Ответы [ 2 ]

4 голосов
/ 04 октября 2019

Единственные шаги, которые вы делаете с B:

int B = A + 2; //from this point B == 3 since 1 + 2 == 3;
...
++B; //now B == 4 because it was incremented by 1 (++ operator);

Пространства имен здесь не имеют ничего общего, вы можете влиять на B только когда ссылаетесь на него (если не используете ссылки или указатели, но не здесь).

4 голосов
/ 04 октября 2019

Это не имеет ничего общего с пространствами имен.

A и B - две отдельные независимые переменные.

Во время запуска вы устанавливаете A в 1, а затем B в 3 (результатвычисление A + 2 в этой точке).

Затем вы добавляете один к A, чтобы получить 2.

B никак не «связан» с A, поэтому это назначениена A не влияет на B.

Затем вы увеличиваете B до 4.

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