Почему правая ассоциативность не работает с оператором объявления

int a=b=c=10;  //invalid statement

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

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

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

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

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

6
задан Michael Petrotta 22 August 2010 в 17:32
поделиться

3 ответа

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

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

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

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

Учтите, я бы сказал, что это выглядит BAD, и не советую этого делать.

8
ответ дан 9 December 2019 в 20:38
поделиться

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

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

int a = b = c = 10;

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

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

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

4
ответ дан 9 December 2019 в 20:38
поделиться

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

0
ответ дан 9 December 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: