int a=b=c=10; //invalid statement
Но следующие действительные утверждения
int a,b,c;
a=b=c=10;
Первый недопустим, поскольку b присваивается a даже до того, как b получило свое значение.
Но второй случай действителен как равный (= ) знак имеет право ассоциативно Знак "=" начнет получать предпочтение с правой стороны.
Мой вопрос: почему Правильная ассоциативность не применяется в первом случае? Означает ли это, что ассоциативность не работает с оператором объявления? Мне нужно больше ясности в этом.
Это не работает, потому что синтаксически неправильно. Как показано во втором примере, несколько переменных одного типа объявляются с использованием запятых в качестве разделителя. Если вместо этого уже объявлены b
и c
, то все работает нормально. Например, это работает:
int b,c;
int a=b=c=10;
Вы даже можете сделать это (по крайней мере, с компилятором VS2010):
int b,c,a=b=c=10;
Учтите, я бы сказал, что это выглядит BAD, и не советую этого делать.
Если бы это было не просто упражнение, а вы протестировали бы это с помощью настоящего компилятора, вы, вероятно, дали бы нам немного больше информации о том, что на самом деле вызывает недовольство компилятор.
Частично ответ заключается в том, чтобы заметить две разные роли оператора =
. Один - это присвоение, а другой - инициализация. Ваш пример
int a = b = c = 10;
эквивалентен
int a = (b = (c = 10));
Таким образом, два =
справа - это назначения, а не инициализации. И в задании должна быть четко определена левая часть.
Переменные необходимо сначала объявить, а затем присвоить значение или использовать в выражениях.