Почему Правильная Ассоциация не работает с заявлением декларации - PullRequest
6 голосов
/ 22 августа 2010
int a=b=c=10;  //invalid statement

Но следующие действительные операторы

int a,b,c;
a=b=c=10;

Первый недопустим, поскольку b присваивается a даже до того, как b получило свое значение.

Но второй случай действителен как равный(=) знак имеет ассоциативность справа, т. е. знак "=" начнет получать предпочтение с правой стороны.

Мой вопрос: почему Правильная ассоциативность не применяется в первом случае?Означает ли это, что ассоциативность не работает с оператором объявления?Мне нужно больше ясности в этом.

Ответы [ 3 ]

8 голосов
/ 22 августа 2010

Это не работает, потому что это не синтаксически правильно.Как показано во втором примере, более одной переменной типа объявляется с использованием запятых в качестве разделителя.Если вместо этого b и c уже объявлены, все работает нормально.Например, это работает:

int b,c;
int a=b=c=10;

Вы даже можете сделать это (по крайней мере, с компилятором VS2010):

int b,c,a=b=c=10;

Имейте в виду, я бы сказал, что выглядит BAD и советую против этого.

4 голосов
/ 22 августа 2010

Если бы это было не просто упражнение, а вы проверили это на реальном компиляторе, вы, вероятно, дали бы нам немного больше информации о , что не понравилось бы компилятору.* Часть ответа будет заключаться в том, чтобы заметить две разные роли оператора =.Один - это назначение, а другой - инициализация.Ваш пример

int a = b = c = 10;

эквивалентен

int a = (b = (c = 10));

Таким образом, два = справа являются присвоениями, а не инициализацией.А в задании левая сторона должна быть четко определена.

0 голосов
/ 22 августа 2010

Переменные необходимо сначала объявить, а затем присвоить значение или использовать в выражениях.

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