Специфікатор constexpr в C + +11 і в C + +14

    Одна з нових можливостей C + +11 — специфікатор
constexpr
. За допомогою нього можна створювати змінні, функції і навіть об'єкти, які будуть розраховані на етапі компіляції. Це зручно, адже раніше для таких цілей доводилося використовувати шаблони. Але тут все не так просто. У тих, хто не так добре знайомий з
constexpr
, може скластися враження, що тепер не буде жодних проблем з розрахунками на етапі компіляції. Але на
constexpr
-вирази накладені серйозні обмеження.
 
У першій частині буде розказано про
constexpr
, про те, які будуть зміни в стандарті C + +14, а у другій частині буде приклад використання
constexpr
: бібліотека, яка вважає результат математичного виразу в рядку.
За допомогою неї можна буде написати наступний код:
 
constexpr auto x = "(4^2-9)/8+2/3"_solve;
std::cout << "Answer is " << x;

І відповідь у вигляді дробу буде отриманий на етапі компіляції:
 
Answer is 37/24

Відразу попереджаю, код цієї бібліотеки складно зрозуміти.
Кому ця тема цікава, ласкаво просимо під кат!
 
Читати далі →

Короткий вступ в rvalue-посилання

      Переклад статті «A Brief Introduction to Rvalue References», Howard E. Hinnant, Bjarne Stroustrup, Bronek Kozicki.
 
Rvalue посилання — маленьке технічне розширення мови C + +. Вони дозволяють програмістам уникати логічно непотрібного копіювання і забезпечувати можливість ідеальної передачі (perfect forwarding). Насамперед вони призначені для використання у високо продуктивних проектах і бібліотеках.
 
 

Введення

Цей документ дає первинне уявлення про нову функції мови C + + — rvalue посиланням. Це короткий навчальний керівництво, а не повна стаття. Для отримання додаткової інформації подивіться список посилань в кінці.
 
 

Rvalue посилання

Rvalue посилання — це складовою тип, дуже схожий на традиційну посилання в C + +. Щоб розрізняти ці два типи, ми будемо називати традиційну C + + посилання lvalue посилання. Коли буде зустрічатися термін посилання, то це відноситься до обох видів посилань, і до lvalue посиланнях, і до rvalue посиланнях.
Читати далі →

Навіщо і як я писав BOSS'а і що з цього вийшло. Кроссплатформенная система плагінів на C + +11

  Кілька разів я вже посилався на свій пост про кроссплатформенной системі плагінів на C + +11 [1] . Цей пост виник з бажання спробувати деякі нововведення стандарту C + +11. На чому пробувати — довго не роздумував. У мене вже був пост про кроссплатформенной компонентної моделі [2] на C + +03 і він з'явився з невеликого раніше розроблюваного проекту.
 
 
З появою gcc 4.7.2 мені випала можливість поекспериментувати вдосталь з C + +11. Трохи пізніше вирішив довести матеріал до логічного завершення: зробити код більш закінченим, трохи написати документації та створити невеликий ресурс [3] , де все це можна було б розмістити.
 
Читати далі →