С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
1

auto в C++: развитие или деградация?

29.08.2015, 15:18. Показов 3321. Ответов 59
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цитата Сообщение от castorsky Посмотреть сообщение
Важно то, что c++ хоть как-то подтягивается к развитым языкам.
А в чем развитие то? Я вижу только деградацию... вводить такую фигню только ради сокращения записи т.е синтактического сахара?

 Комментарий модератора 
Данная тема вынесена из отсюда.
Стартовый пост является ответом на это сообщение.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2015, 15:18
Ответы с готовыми решениями:

Деградация общество или что-то еще
В наше время людей интересует больше всего деньги, алкоголь/наркотики, секс. Это было всегда, или в...

Некорректно работают функции Auto-Tone, Auto contrast, Auto color
Не корректно работают функции Auto-Tone, Auto contrast, Auto color. Вот пример (как на картинке)....

Auto lisp аналог let или варианты определения локальных фугкций
сабж + visual lisp

Деградация рейда 1
Добрый день, подскажите по деградации диска, использовалось 3 диска (2 ssd на 120гб и один обычный...

59
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.08.2015, 15:21 2
Цитата Сообщение от castorsky Посмотреть сообщение
Важно то, что c++ хоть как-то подтягивается к развитым языкам.
среди языков со статической типизацией,
у него самая мощная на сегодняшний день
система изнасилования типов.

так к каким таким языкам он подтягивается?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 17:26 3
Цитата Сообщение от Avazart Посмотреть сообщение
А в чем развитие то?
type inference
Цитата Сообщение от Avazart Посмотреть сообщение
Я вижу только деградацию... вводить такую фигню только ради сокращения записи т.е синтактического сахара?
Ну тут не только сахарок. Это и параметрический полиморфизм, и строгость типизации, и автоматизация ручной работы.
Цитата Сообщение от hoggy Посмотреть сообщение
среди языков со статической типизацией,
у него самая мощная на сегодняшний день
система изнасилования типов.
Я не понимаю что подразумевается под "изнасилованием". У c++ слабая статическая типизация.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
bash-4.3~$ cat ./hello.cpp && g++ ./hello.cpp && ./a.out
#include <iostream>
 
int
main (int argc, char ** argv)
{
    bool a = true, b = true;
    std::cout << a + b << std::endl;
    return 0;
}
2
bash-4.3~$
Цитата Сообщение от hoggy Посмотреть сообщение
так к каким таким языкам он подтягивается?
SML например.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 17:49  [ТС] 4
Цитата Сообщение от castorsky Посмотреть сообщение
Это и параметрический полиморфизм
Каким боком тут auto?
Цитата Сообщение от castorsky Посмотреть сообщение
и автоматизация ручной работы.
Это и есть сахар.
Цитата Сообщение от castorsky Посмотреть сообщение
и строгость типизации
Так она всегда была, нет?

Лично я предпочитаю явно выражать свои намерения в коде, а не мучать читающего загадками.
Т.е. понятно что auto можно использовать умеренно и с умом, но ведь легче то пихать везде и подряд...
Именно по этому я бы не сказал что это великое дoстижение.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 18:07 5
Цитата Сообщение от Avazart Посмотреть сообщение
Каким боком тут auto?
Обычным
Цитата Сообщение от Avazart Посмотреть сообщение
Так она всегда была, нет?
Пример Вы внимательно смотрели? Ada или haskell такое даже не скомпилируют. Но поскольку c++ автоматически приводит к типу int, это говорит о слабости типизации.

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Лично я предпочитаю явно выражать свои намерения в коде, а не мучать читающего загадками.
Т.е. понятно что auto можно использовать умеренно и с умом, но ведь легче то пихать везде и подряд...
Именно по этому я бы не сказал что это великое дoстижение.
Лично Вы может просто никогда не писали на хороших языках. Но это Ваши личные проблемы.

0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 19:17  [ТС] 6
Цитата Сообщение от castorsky Посмотреть сообщение
Обычным
Во первых главное слово почти, во вторых зачем дублировать то что у нас уже есть - шаблоны? В чем достижение то?
Может быт и красивее выглядит, но толку то?

Цитата Сообщение от castorsky Посмотреть сообщение
Вы внимательно смотрели? Ada или haskell такое даже не скомпилируют.
Ну так замените встроенные типы(которые имеют свою историю) своими классами и тоже не будет компилироваться, если вы конечно не захотите что бы он не компилировалось и не определите операторы приведения.

Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
Лично Вы может просто никогда не писали на хороших языках. Но это Ваши личные проблемы.
"Хорошие языки" не так востребованы или я ошибаюсь?
0
806 / 533 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
29.08.2015, 19:21 7
RAFA91, в стандартах до Си++ 2011, а так же в чистом Си ключевое слово auto использовалось лишь для создания автоматической (локальной) переменной (относительно функции), хотя в большинстве случаев это ключевое слово опускалось.
Если непонятно, то почитайте в обычном учебнике про классы памяти переменных.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 19:42 8
Цитата Сообщение от Avazart Посмотреть сообщение
Во первых главное слово почти, во вторых зачем дублировать то что у нас уже есть - шаблоны?
Шаблоны это не параметрический полиморфизм. Можете почитать на вике. Впрочем я не утверждаю что ПП будет, я говорю о том что ввод автовыводилки вполне легко может за собой привести ПП. Да, придется избавиться от ненужного наследия. Но это только хорошо. Слава Бгу уже научились ломать ABI через колено.
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так замените встроенные типы(которые имеют свою историю) своими классами и тоже не будет компилироваться, если вы конечно не захотите что бы он не компилировалось и не определите операторы приведения.
Почему я должен делить примитивы и юзер классы? Typesafe отсутствует и этого достаточно для утверждения что в c++ нестрогая статическая типизация. Вы, наверное, единственный для кого это новость.
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
bash-4.3~$ cat ./hello.cpp && g++ ./hello.cpp && ./a.out
#include <iostream>
 
int
main (int argc, char ** argv)
{
    bool a(true), b(true);
    std::cout << a + b << std::endl;
    return 0;
}
2
bash-4.3~$

Вот Вам typesafe
Кликните здесь для просмотра всего текста
Haskell
1
2
3
4
5
6
7
8
9
Prelude> let (a, b) = (True, True) in a + b
 
<interactive>:4:32:
    No instance for (Num Bool) arising from a use of+’
    In the expression: a + b
    In the expression: let (a, b) = (True, True) in a + b
    In an equation for ‘it’: it = let (a, b) = ... in a + b
Prelude> 
Leaving GHCi.

Цитата Сообщение от Avazart Посмотреть сообщение
"Хорошие языки" не так востребованы или я ошибаюсь?
Ошибаетесь, еще.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 20:48  [ТС] 9
Цитата Сообщение от castorsky Посмотреть сообщение
Шаблоны это не параметрический полиморфизм. Можете почитать на вике.
Да пофиг как это называть, суть не меняется этого можно достич уже существующими средставами С++ тем ме же шаблонами, кстати вы вики через строчку читали?

Цитата Сообщение от castorsky Посмотреть сообщение
Typesafe отсутствует и этого достаточно для утверждения что в c++ нестрогая статическая типизация. Вы, наверное, единственный для кого это новость.
Я уже по поводу примера ответил, пример не корректен. Неявное приведение типов может быть, а может и не быть, это уже как определишь.

Цитата Сообщение от castorsky Посмотреть сообщение
Ошибаетесь, еще.
Я все понимаю, но каким боком там Ruby ?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 20:56 10
Цитата Сообщение от Avazart Посмотреть сообщение
Да пофиг как это называть, суть не меняется этого можно достич уже существующими средставами С++ тем ме же шаблонами
Я не являюсь членом комитета. Если Вы считаете что вывод типов в c++ не нужен, все претензии отсылайте туда.

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
кстати вы вики через строчку читали?
Спасибо, не нуждаюсь. Багаж знаний позволяет не заглядывать.


Цитата Сообщение от Avazart Посмотреть сообщение
Я уже по поводу примера ответил, пример не корректен.
Пусть будет не корректен. Если Вам так хочется.
Цитата Сообщение от Avazart Посмотреть сообщение
Я все понимаю, но каким боком там Ruby ?
Ruby с моей точки зрения входит в категорию:
Цитата Сообщение от Avazart Посмотреть сообщение
"Хорошие языки"
Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Да пофиг как это называть, суть не меняется
Вот именно что суть меняется. Это разные способы достижения одной цели.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 20:57  [ТС] 11
Цитата Сообщение от castorsky Посмотреть сообщение
Спасибо, не нуждаюсь. Багаж знаний позволяет не заглядывать.
Ну так чего призывать, если самому лень заглянуть?

Цитата Сообщение от castorsky Посмотреть сообщение
Ruby с моей точки зрения входит в категорию:
Блин и что вы будете сравнивать скриптовый язык с компилируемым? Это не серьезно...

Цитата Сообщение от castorsky Посмотреть сообщение
Вот именно что суть меняется. Это разные способы достижения одной цели.
А если бантиком обвязать?

Способ один и тот же типы определяются во время компиляции, вам это не нравится?
Или то что чуть больше кода получается?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 21:01 12
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так чего призывать, если самому лень заглянуть?
Держи link
В данном коде (С++) определение функции на уровне исходного кода по-прежнему единственно, но в результате компиляции порождается такое количество перегруженных мономорфных функций, с каким количеством типов данных функция вызывается в программе. Другими словами, параметрический полиморфизм на уровне исходного кода транслируется в ad hoc полиморфизм на уровне целевой платформы.
Цитата Сообщение от Avazart Посмотреть сообщение
Блин и что вы будете сравнивать скриптовый язык с компилируемым? Это не серьезно...
Я не сравниваю. Я ответил на Ваш вопрос
Цитата Сообщение от Avazart Посмотреть сообщение
"Хорошие языки" не так востребованы или я ошибаюсь?
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 21:24  [ТС] 13
Цитата Сообщение от castorsky Посмотреть сообщение
Держи link
А это как раз по твоей ссылке ниже:
Параметрический полиморфизм также доступен в некоторых императивных (в частности, объектно-ориентированных) языках программирования, где для его обозначения обычно используется термин «обобщённое программирование»:
А еще ниже пример для Си и для С++ на осонве шаблона.

Ну или:
Полиморфизм

Семантика системы типов С++ не полиморфна (в отличие от потомков ML, в том числе гибридных с Си — BitC, Cyclone), однако есть несколько способов обеспечить полиморфное поведение. Прежде всего это перегрузка методов классов при наследовании — традиционный для ООП способ обеспечения абстракции данных. Затем есть два способа реализации параметрического полиморфизма (в С++-сообществе обычно называемого «обобщённым программированием»). Первый способ унаследован из Си — использование бестипового указателя и приведение типа в зависимости от других данных — хотя в С++ этот способ традиционно считается неидеоматичным и опасным. Второй заключается в использовании шаблонов — но, в отличие от обычных реализаций параметрического полиморфизма, в С++ происходит автоматическая генерация семейства перегруженных мономорфных функций на основании полиморфного определения (шаблона) в соответствии с контекстами его использования — то есть параметрический полиморфизм на уровне исходного кода транслируется в ситуативный (ad hoc) на уровне машинного, за что С++ подвергается критике (см. раздел Вычислительная производительность). В С++ также есть третий вид перегрузки — перегрузка операторов — которая в сочетании с наследованием классов предоставляет ещё большие возможности повышения читабельности кода путём ввода т. н. «синтаксического сахара».
https://ru.wikipedia.org/wiki/... 0.B7.D0.BC
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 21:31 14
Avazart, Это Ваша лужа, в которую Вы сели по шею.
Цитата Сообщение от Avazart Посмотреть сообщение
то есть параметрический полиморфизм на уровне исходного кода транслируется в ситуативный (ad hoc) на уровне машинного
А по сути текста это феерический бред
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 21:48  [ТС] 15
Ну не я предлагал обращаться к вики.
Что они имели под машинным уровнем мне тоже не понятно.

Но вы так и не ответили на что может конкретно auto чего нельзя достичь шаблоном? Вот конкретно по вашему примеру? За исключеним конечто "красивого вида"?
А то все больше и больше съзжаете с темы...

Добавлено через 5 минут
К примеру введение decltype позволяет выводить тип возвращаемого значения из типов аргументов в шаблоных ф-циях, который ранее нужно было указывать явно.
0
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.08.2015, 21:57 16
Avazart, напиши лямбда-функцию, которая может принимать любое число аргументов любого типа, и засунь ее в переменную. Все без auto.
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 22:04 17
Цитата Сообщение от Avazart Посмотреть сообщение
Что они имели под машинным уровнем мне тоже не понятно
Раз Вы не знаете Вам непонятно, то было бы уместным не начинать полемику.
Цитата Сообщение от Avazart Посмотреть сообщение
Но вы так и не ответили на что может конкретно auto чего нельзя достичь шаблоном?
Вы не ставили такой вопрос. Вот Ваш вопрос:
Цитата Сообщение от Avazart Посмотреть сообщение
А в чем развитие то?
Вот мой ответ.
Цитата Сообщение от Avazart Посмотреть сообщение
А то все больше и больше съзжаете с темы...
Я не "съезжаю с темы". Это Вы теряете нить разговора. Ставите вопрос, получаете ответ, потом предъявляете претензию по поводу вопросов, которых не было. Таким образом превращая тему во флуд.
Цитата Сообщение от Avazart Посмотреть сообщение
К примеру введение decltype позволяет выводить тип возвращаемого значения из типов аргументов в шаблоных ф-циях, который ранее нужно было указывать явно.
Я рад за всех плюсистов что у них теперь есть такая крутая штука как decltype.

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Ну не я предлагал обращаться к вики.
Просто Вы несете такую чушь, пардон, которую можно опровергнуть даже рукипедией.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 22:26  [ТС] 18
Цитата Сообщение от castorsky Посмотреть сообщение
Раз Вы не знаете Вам непонятно, то было бы уместным не начинать полемику.
Раз вы не читали вики, можно было туда не отсылать.
Цитата Сообщение от castorsky Посмотреть сообщение
Просто Вы несете такую чушь, пардон, которую можно опровергнуть даже рукипедией.
Даже? Я как бы других источников от вас не дождался.
А когда открыл вики как вы посоветовали то там чудом оказалось "чушь" ?

Цитата Сообщение от castorsky Посмотреть сообщение
которую можно опровергнуть даже рукипедией.
Ну выходит что нет?

Цитата Сообщение от castorsky Посмотреть сообщение
Вы не ставили такой вопрос. Вот Ваш вопрос:
Вобще-то ставил, я спрашивал в чем разница, конкретно на вашем примере и вы съекали.
В любом случае, я поставил вопрос сейчас, если вы что-то не уловили сразу.
И когда раница есть, это и есть развитие.

Цитата Сообщение от ct0r Посмотреть сообщение
Avazart, напиши лямбда-функцию, которая может принимать любое число аргументов любого типа, и засунь ее в переменную. Все без auto.
Да интересно, нужно подумать...

Добавлено через 9 минут
Цитата Сообщение от ct0r Посмотреть сообщение
Avazart, напиши лямбда-функцию, которая может принимать любое число аргументов любого типа, и засунь ее в переменную. Все без auto.
Да теперь кажется понятно.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.08.2015, 22:36 19
Цитата Сообщение от Avazart Посмотреть сообщение
Раз вы не читали вики, можно было туда не отсылать.
Это что? "Сам дурак"? Цитата с первого раза не понятна?
Цитата Сообщение от Avazart Посмотреть сообщение
Даже? Я как бы других источников от вас не дождался.
Рукалицо. Cardeli L, Wegner P.
Parametric polymorphism is obtained when a function works uniformly on a range of types: these types
normally exhibit some common structure. Ad-hoc polymorphism is obtained when a function works, or
appears to work, on several different types (which may not exhibit a common structure) and may behave in
unrelated ways for each type.
Цитата Сообщение от Avazart Посмотреть сообщение
А когда открыл вики как вы посоветовали то там чудом оказалось "чушь" ?
Именно чушь. Читать источник выше полностью.
Цитата Сообщение от Avazart Посмотреть сообщение
Вобще-то ставил, я спрашивал в чем разница, конкретно на вашем примере и вы съекали.
Выделенное жирным надо обрамлять тегом URL.
Цитата Сообщение от Avazart Посмотреть сообщение
В любом случае, я поставил вопрос сейчас, если вы что-то не уловили сразу.
Мой ответ так же распространяется на Ваш новый вопрос, если Вы что-то не уловили сразу. Возможность ПП и строгость типизации удовлетворит Ваше ЧСВ?
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2015, 22:39  [ТС] 20
ct0r, Только как я понимаю "шаблонные" лямбды не везде еще реализованы? Это ведь С++14 ?
0
29.08.2015, 22:39
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2015, 22:39
Помогаю со студенческими работами здесь

Деградация программистов
Программистов теперь не интересует астрономия, история, компьютерные игры. На этом форуме за месяц...

Деградация системы и программ
Наверное, многие сталкивались с ситуацией, когда какая-то программа, если ей долго не пользоваться,...

Cannot re-assign auto-global variable _POST in или Warning: Invalid argument supplied for foreach() in
Здравствуйте, у меня такая проблемка, на php 5.3 всё работало, а вот когда перешел на php 5.6...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru