Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет!
МР>Почему такой кривой синтаксис? МР>
МР>template<typename Container>
МР>auto get(Container& c, int i) -> decltype(c[i]);
МР>
МР>Ведь наверное нет никаких принципиальных проблем поддержать более естественный синтаксис? МР>
МР>template<typename Container>
МР>decltype(c[i]) get(Container& c, int i);
МР>
МР>Ну и что, что c и i еще не объявлены — можно же забежать вперед и найти их.
Естественный для кого? Для сишки, которую пора выпилить нафиг из С++? Есть полно языков, где естественно тип результата объявлять уже после списка параметров.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
ну так забеги туда вперед, зачем сюда забегать ?
возьми книгу дракона по компиляторам почитай, лучше на англисйком что бы сюда вопросы копипастить и переспрашивать
Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет!
МР>Почему такой кривой синтаксис? МР>
МР>template<typename Container>
МР>auto get(Container& c, int i) -> decltype(c[i]);
МР>
МР>Ведь наверное нет никаких принципиальных проблем поддержать более естественный синтаксис? МР>
МР>template<typename Container>
МР>decltype(c[i]) get(Container& c, int i);
МР>
МР>Ну и что, что c и i еще не объявлены — можно же забежать вперед и найти их.
Эээ... Кому забежать? Компилятор вперед не забегает, и введение новых ключевых слов в С++11 не меняло принципиальных алгоритмов работы компилятора. Странный вопрос, если честно.
V>Эээ... Кому забежать? Компилятор вперед не забегает, и введение новых ключевых слов в С++11 не меняло принципиальных алгоритмов работы компилятора. Странный вопрос, если честно.
да он Сеттера уже всего сюда перецитировал
как только он встречает в книге как Сеттер пишет вот "это вот так вот лучше"
он сразу бежит с вопросом "почему это вот так вот лучше ?"
R>да он Сеттера уже всего сюда перецитировал R>как только он встречает в книге как Сеттер пишет вот "это вот так вот лучше"
R>он сразу бежит с вопросом "почему это вот так вот лучше ?"
Ты в каждой второй теме херами покрываешь тех, кто задает вопросы. Это токсичное, неправильное поведение. Не делай так.
Здравствуйте, Максим Рогожин, Вы писали:
МР>Ведь наверное нет никаких принципиальных проблем поддержать более естественный синтаксис? МР>
МР>template<typename Container>
МР>decltype(c[i]) get(Container& c, int i);
МР>
МР>Ну и что, что c и i еще не объявлены — можно же забежать вперед и найти их.
Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать:
Здравствуйте, T4r4sB, Вы писали:
TB>Естественный для кого? Для сишки, которую пора выпилить нафиг из С++? Есть полно языков, где естественно тип результата объявлять уже после списка параметров.
Да, для сишки. Это целостность в рамках языка, не хорошо, когда в одном месте так, а в другом — иначе.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, B0FEE664, Вы писали:
МР>Почему такой кривой синтаксис? МР>
МР>template<typename Container>
МР>auto get(Container& c, int i) -> decltype(c[i]);
МР>
BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать: BFE>
BFE>auto get(Container& c, int i);
BFE>
BFE>Никаких принципиальных проблем тут нет.
Ну это как посмотреть. Оригинальный вариант возвращет lvalue, а второй — rvalue
Но есть еще один вариант:
decltype(auto) get(Container& c, int i) { return c[i]; }
Здесь опять lvalue. Но появляется новая проблема (ограничение) — к функции нельзя обратиться, пока тип результата не будет выведен. Это создает некоторый дискомфорт при написании рекурсивных функций, чего нет для первого варианта, когда тип возвращаемого значения задан явно.
Здравствуйте, rg45, Вы писали:
BFE>>Никаких принципиальных проблем тут нет. R>Ну это как посмотреть. Оригинальный вариант возвращет lvalue, а второй — rvalue R>Но есть еще один вариант: R>
R>decltype(auto) get(Container& c, int i) { return c[i]; }
R>
R>Здесь опять lvalue.
Это не принципиально. Теоретически можно было бы и такой вариант поддержать:
auto& get(auto& c, auto i) { return c[i]; }
Удивлён, что вместо этого приходится писать:
auto foo(auto c, auto i) -> auto& { return c[i]; }
Здесь
R>Но появляется новая проблема (ограничение) — к функции нельзя обратиться, пока тип результата не будет выведен. Это создает некоторый дискомфорт при написании рекурсивных функций, чего нет для первого варианта, когда тип возвращаемого значения задан явно.
А вот тут я согласен: для рекурсивных функций могут быть принципиальные сложности.
R>на каждый тупой вопрос надо так же реагировать всем R>а вы набирайтесь терпения еще лет на 10, он эти вопросы будет генерировать всю его жизнь
R>не дано Максиму Пригожину освоить программирование, впору уже в чем то другом себя попробовать
Не знаю, какой у вас уровень в программировании (да и не хочу знать), но как человек вы дурак дураком)
Без обид, это просто наблюдение у меня такое)
Здравствуйте, T4r4sB, Вы писали:
TB>Естественный для кого? Для сишки, которую пора выпилить нафиг из С++? Есть полно языков, где естественно тип результата объявлять уже после списка параметров.
Естественный в смысле единообразный — в C++ принято тип результата объявлять перед именем функции.
Здравствуйте, Vamp, Вы писали:
МР>>Ну и что, что c и i еще не объявлены — можно же забежать вперед и найти их. V>Эээ... Кому забежать? Компилятор вперед не забегает, и введение новых ключевых слов в С++11 не меняло принципиальных алгоритмов работы компилятора. Странный вопрос, если честно.
Ничего странного. А откуда вам знать меняло или нет добавление новых ключевых слов принципиальные алгоритмы работы компилятора? И какие алгоритмы вы считаете принципиальными, а какие не очень?)
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Максим Рогожин, Вы писали:
МР>>Ведь наверное нет никаких принципиальных проблем поддержать более естественный синтаксис? МР>>
МР>>template<typename Container>
МР>>decltype(c[i]) get(Container& c, int i);
МР>>
МР>>Ну и что, что c и i еще не объявлены — можно же забежать вперед и найти их. BFE>Если забежать вперёд, то можно узнать, что тип возвращаемого значения может быть выведен автоматически. Достаточно написать: BFE>