синтаксис — двойные фигурные скобки в конструкторе C ++

Что означают двойные фигурные скобки в следующей строке кода C ++?

piranha::symbol_set ss({{piranha::symbol(detail::poly_print(var))}});

Для контекста, это из файла в коде SymEngine ("symengine/polys/uintpoly_piranha.h"), который можно найти по ссылке ниже, а также библиотеку Piranha, которая используется в приведенной выше строке.

Я знаю, что одиночные фигурные скобки используются в качестве списков инициализаторов, но значение двойных фигурных скобок в скобках для меня мало что значит.

Главное, что я нашел на двойных фигурных скобках, было эта почта, но это не похоже здесь применимо.

Кроме того, я прошу прощения за ссылки на исходный код, как это, но я не уверен, как сделать меньший пример, учитывая мое непонимание.

Спасибо!

2

Решение

Фигурные скобки могут быть использованы для описания

  • список инициализатора, который объясняет внешние скобки (создание std::initializer_list символов см. соответствующий конструктор)
  • сокращенная запись вызова конструктора, которая объясняет внутренний
    фигурные скобки (создание экземпляра symbol используя конструктор перемещения, смотрите соответствующий конструктор)
    Если тип параметра известен заранее, вместо symbol{parameters} ты можешь просто написать {parameters}, Это также работает для возвращаемых значений и инициализации переменных.

Так что на самом деле происходит в этой строке:

  • std::string возвращается из detail::poly_print(var)
  • Эта строка используется для построения piranha::symbol
  • Это временное значение затем передается конструктору перемещения (я предполагаю здесь) symbol, построив другую symbol
    Это кажется немного излишним, но я не пробовал, если код работает только с одной парой скобок
  • это piranha::symbol затем сохраняется в std::initializer_list
  • который затем передается конструктору piranha::symbol_set
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]