Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет!
МР>Почему такой кривой синтаксис? МР>
МР>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 еще не объявлены — можно же забежать вперед и найти их.
Естественный для кого? Для сишки, которую пора выпилить нафиг из С++? Есть полно языков, где естественно тип результата объявлять уже после списка параметров.
ну так забеги туда вперед, зачем сюда забегать ?
возьми книгу дракона по компиляторам почитай, лучше на англисйком что бы сюда вопросы копипастить и переспрашивать
Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет!
МР>Почему такой кривой синтаксис? МР>
МР>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>