crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> consexpr c++11
igor_bogomolov
  опции профиля:
сообщение 21.9.2012, 0:09
Сообщение #1


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Хоть на с++ уже давно не пишу, решил не отставать от жизни (хотя уже отстал) и немного подучить новый стандарт.
Понравилось идея с 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';
, то здесь результат уже будет получен во время исполнения. Жалко что компилятор об этом не предупреждает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.1.2021, 17:56