Re[3]: decltype() возвращаемый тип
От: _NN_ www.nemerleweb.com
Дата: 17.10.18 17:26
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Здравствуйте, _NN_, Вы писали:


_NN>>Всё может конечно.

_NN>>Вопрос готовы ли вы получить ещё более медленную компиляцию ?

МР>Не знаю на сколько медленнее, но в итоге в C++14 мы все равно это получили:

МР>
МР>auto get(Container& c, int i) { return c[i]; }
МР>decltype(auto) get(Container& c, int i) { return c[i]; }
МР>

МР>Так ведь?

Тут есть и другой аспект, нельзя использовать параметры до их объявления:
#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;

double u;
float v;

template<typename U, typename V>
decltype(u + v) f(U u, V v) { return 0; }

template<typename U, typename V>
auto g(U u, V v) -> decltype(u + v) { return 0; }

int main() {
    
    cout << typeid(f(1, 2)).name() << endl; // double
    cout << typeid(g(1, 2)).name() << endl; // int
    
    return 0;
}


https://ideone.com/IbbLEn
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: decltype() возвращаемый тип
От: rg45 СССР  
Дата: 17.10.18 17:34
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Не совсем так — оригинальный вариант возвращает либо lvalue либо rvalue, в зависимости от того что возвращает c[i].


Верно, так и есть, в то время как второй вариант возвращает только rvalue.
--
Re[3]: decltype() возвращаемый тип
От: T4r4sB Россия  
Дата: 17.10.18 17:39
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Да, для сишки. Это целостность в рамках языка, не хорошо, когда в одном месте так, а в другом — иначе.


Наследие сишки вообще тянет язык назад, нахер эту целостность.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: decltype() возвращаемый тип
От: Ops Россия  
Дата: 17.10.18 20:28
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Наследие сишки вообще тянет язык назад, нахер эту целостность.


Положение возвращаемого значения тянет? Серьезно?
Там, конечно, есть многое, от чего бы хотелось отказаться, но обсуждаемый момент вообще никуда не тянет, да еще и сокращает количество мусора в коде: никаких дебильных fn, func, function и т.п., объявление функции от ее вызова легко отличить и без них.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: decltype() возвращаемый тип
От: T4r4sB Россия  
Дата: 17.10.18 20:34
Оценка: +1 -1
Здравствуйте, Ops, Вы писали:

Ops>Положение возвращаемого значения тянет? Серьезно?

Ops>Там, конечно, есть многое, от чего бы хотелось отказаться, но обсуждаемый момент вообще никуда не тянет, да еще и сокращает количество мусора в коде: никаких дебильных fn, func, function и т.п., объявление функции от ее вызова легко отличить и без них.

fn, func, function не дебильные, это отличные зацепки для глаза и для компилятора. Не надо бояться многословности.
a b(c) — это объявление функции, или конструктор?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[6]: decltype() возвращаемый тип
От: Ops Россия  
Дата: 17.10.18 21:05
Оценка: -1
Здравствуйте, T4r4sB, Вы писали:

TB>fn, func, function не дебильные, это отличные зацепки для глаза и для компилятора. Не надо бояться многословности.


Не, это мусор, без которого код выглядит чище. Многословность — это плохо, в нагромождении ненужных слов проще пропустить ошибку.

TB>a b(c) — это объявление функции, или конструктор?


Это вообще не проблема функций, это проблема синтаксиса конструкторов.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: decltype() возвращаемый тип
От: rg45 СССР  
Дата: 17.10.18 21:20
Оценка: -1
Здравствуйте, T4r4sB, Вы писали:

TB>fn, func, function не дебильные, это отличные зацепки для глаза и для компилятора. Не надо бояться многословности.


Это прошлый век.

TB>a b(c) — это объявление функции, или конструктор?


Это без труда можно сказать, если есть понимание, что такое "c". А если такого понимания нет, то это очень хреновый стиль кодирования.
--
Re[7]: decltype() возвращаемый тип
От: T4r4sB Россия  
Дата: 17.10.18 21:22
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Не, это мусор, без которого код выглядит чище. Многословность — это плохо, в нагромождении ненужных слов проще пропустить ошибку.


Многословность это хорошо, ключевые слова служат для подтверждения того, что компилятор правилбно тебя понял и что ты действительно имеешь в виду то, что подумал компилятор. Человеческие языки очень избыточны в том числе и поэтому.

TB>>a b(c) — это объявление функции, или конструктор?


Ops>Это вообще не проблема функций, это проблема синтаксиса конструкторов.


Куда ни плюнь — везде проблема синтаксиса из-за наследия ублюдочного синтаксиса сишки-отсосишки, ну надо же.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[7]: decltype() возвращаемый тип
От: T4r4sB Россия  
Дата: 17.10.18 21:25
Оценка:
Здравствуйте, rg45, Вы писали:

R>Это прошлый век.


Что? Может ещё и названия типов вместо дебильного хипстерского auto — прошлый век?
Не, auto действительно нужно там в ряде случаев, в шаблонах там, или если название типа длинная лабуда типа std:kokoko<std::kukarek>::forward_iterator, которая не добавит пониманя, я про его напихивание во все щели.

R>Это без труда можно сказать, если есть понимание, что такое "c". А если такого понимания нет, то это очень хреновый стиль кодирования


Это увеличивает время на понимание конструкции.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[8]: decltype() возвращаемый тип
От: Ops Россия  
Дата: 17.10.18 22:32
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Многословность это хорошо, ключевые слова служат для подтверждения того, что компилятор правилбно тебя понял и что ты действительно имеешь в виду то, что подумал компилятор. Человеческие языки очень избыточны в том числе и поэтому.


В человеческих языках тоже встречаются слова-паразиты, только одобрять их никому в голову не приходит.

TB>Куда ни плюнь — везде проблема синтаксиса из-за наследия ублюдочного синтаксиса сишки-отсосишки, ну надо же.


Неужели конструкторы, и вообще классы — это наследие С?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: decltype() возвращаемый тип
От: T4r4sB Россия  
Дата: 18.10.18 06:43
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>В человеческих языках тоже встречаются слова-паразиты, только одобрять их никому в голову не приходит.


Только избавиться от них на 100% почему-то не получается, почему?

Ops>Неужели конструкторы, и вообще классы — это наследие С?


Они сдизайнены так, чтоб не дай бог не потревожить наследие С, и это плохо.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[7]: decltype() возвращаемый тип
От: AlexRK  
Дата: 18.10.18 07:15
Оценка:
Здравствуйте, rg45, Вы писали:

TB>>fn, func, function не дебильные, это отличные зацепки для глаза и для компилятора. Не надо бояться многословности.


R>Это прошлый век.


Это сишный синтаксис — прошлый век, все современные языки его дропнули.
Re: decltype() возвращаемый тип
От: Шахтер Интернет  
Дата: 18.10.18 15:57
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Почему такой кривой синтаксис?

МР>
МР>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 еще не объявлены — можно же забежать вперед и найти их.

Проблема здесь не в самом языке, а в реализации подобной возможности компилятором.
Синтаксический разбор современного С++ -- весьма нетривиальная задача уже.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[8]: decltype() возвращаемый тип
От: PavelCH  
Дата: 10.11.18 11:42
Оценка:
TB>Не, auto действительно нужно там в ряде случаев, в шаблонах там, или если название типа длинная лабуда типа std:kokoko<std::kukarek>::forward_iterator, которая не добавит пониманя, я про его напихивание во все щели.
Я вот пихаю во все щели. Удобно. А скриптовые языки некоторые вообще как то работают без строгой типизации и ничего — понимают. Мне кажется тут проблема больше в плоскосте "раньше трава была зеленее".
Нехай щастить
Re[9]: decltype() возвращаемый тип
От: deadem Россия  
Дата: 11.11.18 20:05
Оценка:
Здравствуйте, PavelCH, Вы писали:

TB>>Не, auto действительно нужно там в ряде случаев, в шаблонах там, или если название типа длинная лабуда типа std:kokoko<std::kukarek>::forward_iterator, которая не добавит пониманя, я про его напихивание во все щели.

PCH>Я вот пихаю во все щели. Удобно. А скриптовые языки некоторые вообще как то работают без строгой типизации и ничего — понимают. Мне кажется тут проблема больше в плоскосте "раньше трава была зеленее".
Не-е, тут проблема именно в плоскосте.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.