Сообщение Re: Приоритет операторов в C++ от 23.01.2017 8:23
Изменено 23.01.2017 8:23 netch80
Re: Приоритет операторов в C++
Здравствуйте, RussianFellow, Вы писали:
RF>Мне там не всё понятно. В частности, мне не понятно, что такое левоассоциативность и правоассоциативность операторов в C++.
Это как оно расставит скобки в цепочке одинаковых операторов, если скобок нет.
a+b+c интерпретируется (a+b)+c, а не a+(b+c) (для большинства случаев пофиг)
a-b-c — как (a-b)-c, а не a-(b-c) (а вот тут уже не пофиг, результат совсем другой)
это всё были левоассоциативные.
А вот пример правоассоциативного — возведение в степень — почти везде
в Фортране a**b**c понимается как a**(b**c), а не как (a**b)**c, потому что последнее равно a**(b*c), и смысла в такой ассоциативности — никакого.
В Си a=b=c понимается не как (a=b)=c, а как a=(b=c). Первый вариант не имеет смысла. Второй — имеет.
RF>Не могли бы Вы, уважаемые коллеги, объяснить мне получше, что это такое? А заодно и рассказать понятно про приоритет операторов в C++.
RF>Желательно также привести сложные выражения с операторами и объяснить, что они означают.
А что они могут означать?
RF>Я сейчас читаю Страуструпа, но мне хотелось бы прочитать подробно, понятно, популярно про приоритет операторов в C++.
Почему не начать с более простой книги? Страуструп явно писал, что "не хочет оскорблять профессиональных программистов подробным разжёвыванием".
RF>Мне там не всё понятно. В частности, мне не понятно, что такое левоассоциативность и правоассоциативность операторов в C++.
Это как оно расставит скобки в цепочке одинаковых операторов, если скобок нет.
a+b+c интерпретируется (a+b)+c, а не a+(b+c) (для большинства случаев пофиг)
a-b-c — как (a-b)-c, а не a-(b-c) (а вот тут уже не пофиг, результат совсем другой)
это всё были левоассоциативные.
А вот пример правоассоциативного — возведение в степень — почти везде
в Фортране a**b**c понимается как a**(b**c), а не как (a**b)**c, потому что последнее равно a**(b*c), и смысла в такой ассоциативности — никакого.
В Си a=b=c понимается не как (a=b)=c, а как a=(b=c). Первый вариант не имеет смысла. Второй — имеет.
RF>Не могли бы Вы, уважаемые коллеги, объяснить мне получше, что это такое? А заодно и рассказать понятно про приоритет операторов в C++.
RF>Желательно также привести сложные выражения с операторами и объяснить, что они означают.
А что они могут означать?
RF>Я сейчас читаю Страуструпа, но мне хотелось бы прочитать подробно, понятно, популярно про приоритет операторов в C++.
Почему не начать с более простой книги? Страуструп явно писал, что "не хочет оскорблять профессиональных программистов подробным разжёвыванием".
Re: Приоритет операторов в C++
Здравствуйте, RussianFellow, Вы писали:
RF>Мне там не всё понятно. В частности, мне не понятно, что такое левоассоциативность и правоассоциативность операторов в C++.
Это как оно расставит скобки в цепочке одинаковых (или равноприоритетных) операторов, если скобок нет.
a+b+c интерпретируется (a+b)+c, а не a+(b+c) (для большинства случаев пофиг)
a-b-c — как (a-b)-c, а не a-(b-c) (а вот тут уже не пофиг, результат совсем другой)
это всё были левоассоциативные.
А вот пример правоассоциативного — возведение в степень — почти везде
в Фортране a**b**c понимается как a**(b**c), а не как (a**b)**c, потому что последнее равно a**(b*c), и смысла в такой ассоциативности — никакого.
В Си a=b=c понимается не как (a=b)=c, а как a=(b=c). Первый вариант не имеет смысла. Второй — имеет.
RF>Не могли бы Вы, уважаемые коллеги, объяснить мне получше, что это такое? А заодно и рассказать понятно про приоритет операторов в C++.
RF>Желательно также привести сложные выражения с операторами и объяснить, что они означают.
А что они могут означать?
RF>Я сейчас читаю Страуструпа, но мне хотелось бы прочитать подробно, понятно, популярно про приоритет операторов в C++.
Почему не начать с более простой книги? Страуструп явно писал, что "не хочет оскорблять профессиональных программистов подробным разжёвыванием".
RF>Мне там не всё понятно. В частности, мне не понятно, что такое левоассоциативность и правоассоциативность операторов в C++.
Это как оно расставит скобки в цепочке одинаковых (или равноприоритетных) операторов, если скобок нет.
a+b+c интерпретируется (a+b)+c, а не a+(b+c) (для большинства случаев пофиг)
a-b-c — как (a-b)-c, а не a-(b-c) (а вот тут уже не пофиг, результат совсем другой)
это всё были левоассоциативные.
А вот пример правоассоциативного — возведение в степень — почти везде
в Фортране a**b**c понимается как a**(b**c), а не как (a**b)**c, потому что последнее равно a**(b*c), и смысла в такой ассоциативности — никакого.
В Си a=b=c понимается не как (a=b)=c, а как a=(b=c). Первый вариант не имеет смысла. Второй — имеет.
RF>Не могли бы Вы, уважаемые коллеги, объяснить мне получше, что это такое? А заодно и рассказать понятно про приоритет операторов в C++.
RF>Желательно также привести сложные выражения с операторами и объяснить, что они означают.
А что они могут означать?
RF>Я сейчас читаю Страуструпа, но мне хотелось бы прочитать подробно, понятно, популярно про приоритет операторов в C++.
Почему не начать с более простой книги? Страуструп явно писал, что "не хочет оскорблять профессиональных программистов подробным разжёвыванием".