Форум программистов, компьютерный форум, киберфорум
Наши страницы

Ленивые вычисления - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Матрица размером n*m. С помощью функций реализовать поиск и выборку определенных значений http://www.cyberforum.ru/cpp-beginners/thread916862.html
Буду очень признателен, если кто нибудь решит такую задачу: Дана матрица размером n*m. Нужно найти суммы элементов каждой её строки. Найти наибольшее и наименьшее значение суммы, а также определить...
C++ std:: литература Подскажите, где можно почитать про стандартную библиотеку. http://www.cyberforum.ru/cpp-beginners/thread916855.html
одномерный массив C++
#include "stdafx.h" #include "stdio.h" #include "conio.h" #define eof -1 #define maxind 10 int _tmain(int argc, _TCHAR* argv) { int c; int nd; int i;
C++ Из файла записать данные в структуру данных
Скажите пожалуйста, как можно из файла записать данные в структуру данных? Я пробую fread, он не так работает Добавлено через 15 минут Со считывание разобрался, а можете помочь с тем чтобы данные...
C++ std::regex : баг на сайте или баг компилятора? http://www.cyberforum.ru/cpp-beginners/thread916818.html
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через 35 секунд компилятор gcc 4.8
C++ Проверить решение задачи Здравствуйте! Я С++ изучаю самостоятельно, по книге Р.Лафоре "ООП в С++". В главе 7 "Массивы и строки" столкнулся с задачей Напишите функцию main(), которая получает случайные дробные числа от... подробнее

Показать сообщение отдельно
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,553
Завершенные тесты: 1

Ленивые вычисления - C++

03.07.2013, 10:25. Просмотров 2801. Ответов 27
Метки (Все метки)

____Много есть информации под boost, так же не отстает шарп и опережает всех хаскель. В плюсах только со стандарта C++0x. Даже попалась цельная Qt-шная библиотека для этого дела. Вообще концепция ленивых вычислений зародилась для функциональных языков. Но это все придумано, если возвращаться к C++, для удобства оперирования функторами и еще каких-то таинств. Но по сути же простые "ленивые вычисления" доступны во многих языках, компиляторы которых действуют по некоему принципу call by value. То есть когда значение получено, дальше его обсчитывать смысла нет. Если первый операнд операции && ложен, то вычислять следующие не нужно.
____Общий смысл "ленивых вычислений" в том, что экономится время на проведении вычислений, результаты которых заведомо не будут использованы в дальнейшем программой. Соответственно, за счет снижения объемов вычислений повышается и производительность программы, а за счет отсутствия необходимости хранить в памяти результаты вычислений снижаются и требования программы к памяти. Помимо этого, ленивые вычисления избавляют программиста от необходимости следить за тем, какие именно вычисления будут в дальнейшем востребованы программой, а какие, напротив, окажутся совершенно бесполезными. Последнее не всегда хорошо, учитывая опять же гибкость плюсов, в которых компилятор не даст, вопреки обычному подходу, поступать как заблагорассудится программисту. Но на то в принципе и расчет.

Принцип "ленивого вычисления" проще всего рассмотреть на следующем примере:
C++
1
if (A && B && C && D) {...}
C++
1
2
3
4
5
6
7
8
9
if (A) {
  if (B) {
    if (C) {
      if (D) {
        ...
      }
    }
  }
}
В первом случае не понятно, что, если A ложно, то и остальные вычисления происходить не будут. Во-втором же наглядно видно, что, при ложном A, тело первого оператора условия не будет выполнено.
Оба приведенных кода делают одно и то же. Отличие лишь в компромиссе между читабельностью кода и его объемом.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru