Информация об изменениях

Сообщение Re[3]: Операторы точка и стрелка от 05.02.2022 16:02

Изменено 05.02.2022 16:05 Андрей Тарасевич

Re[3]: Операторы точка и стрелка
Здравствуйте, x-code, Вы писали:

XC>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>Потом эти различия стерлись, `->` стал полным эквивалентом комбинации `*` и `.`, то есть формально он стал излишним. Но удалять из языка его не стали.

АТ>>Ну и в принципе он дает более компактную и удобочитаемую запись, чем `*` с `.` (которые обычно требуют еще и скобок).

XC>Спасибо, очень интересно было узнать про CRM. Хотя я имел в виду не комбинацию точки и звездочки, а просто точку вместо стрелки


А, понял. Ну тогда это вторая часть ответа. Опять же, в старинном C оператор `.` тоже обладал некоторыми "необычными" свойствами, которые были несовместимы с этой идеей. Цитата из "C Reference Manual"

7.1.7 primarylvalue.memberofstructure
An lvalue expression followed by a dot followed by the name of a member of a structure is a primary expression.
The object referred to by the lvalue is assumed to have the same form as the structure containing the structure member.
The result of the expression is an lvalue appropriately offset from the origin of the given lvalue whose type is
that of the named structure member. The given lvalue is not required to have any particular type.
Re[3]: Операторы точка и стрелка
Здравствуйте, x-code, Вы писали:

XC>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>Потом эти различия стерлись, `->` стал полным эквивалентом комбинации `*` и `.`, то есть формально он стал излишним. Но удалять из языка его не стали.

АТ>>Ну и в принципе он дает более компактную и удобочитаемую запись, чем `*` с `.` (которые обычно требуют еще и скобок).

XC>Спасибо, очень интересно было узнать про CRM. Хотя я имел в виду не комбинацию точки и звездочки, а просто точку вместо стрелки


А, понял. Ну тогда это вторая часть ответа. Опять же, в старинном C оператор `.` тоже обладал некоторыми "необычными" свойствами, которые были несовместимы с этой идеей. Цитата из "C Reference Manual"

7.1.7 primarylvalue.memberofstructure
An lvalue expression followed by a dot followed by the name of a member of a structure is a primary expression.
The object referred to by the lvalue is assumed to have the same form as the structure containing the structure member.
The result of the expression is an lvalue appropriately offset from the origin of the given lvalue whose type is
that of the named structure member. The given lvalue is not required to have any particular type.

То есть слева от точки можно было использовать что угодно. Главное, чтобы это было lvalue.