crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в consexpr c++11
Введите ваше имя
Подтвердите код

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

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 21.9.2012, 0:09
  Хоть на с++ уже давно не пишу, решил не отставать от жизни (хотя уже отстал) и немного подучить новый стандарт.
Понравилось идея с constexpr. Теперь вместо некоторых метопрограмм на шаблонах, можно писать так:
Раскрывающийся текст
#include <iostream>

using namespace std;

constexpr int factorial(int x)
{
    return x ? x * factorial(x - 1) : 1;
}

constexpr int fibonacci(int x)
{
    return (x == 0 || x == 1) ? x : fibonacci(x - 1) + fibonacci(x - 2);
}

constexpr int binary(int x)
{
    return x == 0 ? 0 : x % 10 + 2 * binary(x / 10);
}

int main ()
{
    constexpr int fct = factorial(5);
    constexpr int fbn = fibonacci(10);
    constexpr int bin = binary(10000001);

    cout << fct << '\n';
    cout << fbn << '\n';
    cout << bin << '\n';

    return 0;
}
Результат здесь вычисляется на этапе компиляции. На мой взгляд это гораздо удобнее и понятнее чем на шаблонах.

Кстати, если написать так
cout << factorial(5) << '\n';
, то здесь результат уже будет получен во время исполнения. Жалко что компилятор об этом не предупреждает.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:46