Я только что прочитал:
и заметил, что это старый, и большинство ответов относится к пред-2011 С++. В наши дни у нас есть синтаксические лямбды, которые могут даже выводить возвращаемый тип, поэтому ленивая оценка, похоже, сводится к простому их прохождению: вместо
auto x = foo();
вы выполняете
auto unevaluted_x = []() { return foo(); };
а затем оцените, когда/где вам нужно:
auto x = unevaluted_x();
Кажется, что ничего больше. Тем не менее, один из ответов там предлагает использовать фьючерсы с асинхронным запуском. Может кто-то изложить, почему/если фьючерсы значимы для ленивой оценки, на С++ или более абстрактно? Кажется, что фьючерсы вполне могут быть оценены с нетерпением, но просто, скажем, в другом потоке и, возможно, с меньшим приоритетом, чем все, что их создало; и в любом случае, это должно быть зависимым от реализации, не так ли?
Кроме того, существуют ли другие современные С++-конструкции, которые полезно учитывать в контексте ленивой оценки?