Идеи реализовать комментарии стиля переполнения стека

Когда вы инициализируете std::initializer_list, это происходит так:

[dcl.init.list] (выделено мной)

5 Объект типа std :: initializer_list создается из списка инициализаторов , как если бы реализация генерировала и материализовала значение типа «массив N const E» , где N - число элементов в списке инициализатора. Каждый элемент этого массива инициализируется с помощью соответствующего элемента списка инициализатора, и объект std :: initializer_list создается для ссылки на этот массив. [ Примечание : конструктор или функция преобразования, выбранные для копии, должны быть доступны в контексте списка инициализатора. - конец примечания ] Если для инициализации какого-либо из элементов требуется сужающее преобразование, программа некорректна. [ Пример :

struct X {
  X(std::initializer_list v);
};
X x{ 1,2,3 };

Инициализация будет реализована способом, примерно эквивалентным этому:

const double __a[3] = {double{1}, double{2}, double{3}};
X x(std::initializer_list(__a, __a+3));

при условии, что реализация может создать объект initializer_list с пара указателей. - end example ]

blockquote>

То, как этот временный массив используется для инициализации std::initializer_list, определяет, будет ли initializer_list инициализирован константным выражением. В конечном счете, в соответствии с примером (несмотря на то, что он ненормативный), эта инициализация будет принимать адрес массива или его первого элемента, который будет производить значение типа указателя. И это недопустимое константное выражение.

[expr.const] (выделение минное)

5 Постоянное выражение является либо основным константным выражением glvalue это относится к объекту, который является разрешенным результатом постоянного выражения (как определено ниже) или основного постоянного константного выражения, значение которого удовлетворяет следующим ограничениям:

  • , если значение является объектом класса тип, каждый нестатический член данных ссылочного типа относится к объекту, который является разрешенным результатом константного выражения,
  • , если значение имеет тип указателя, оно содержит адрес объекта с статическая длительность хранения, адрес после конца такого объекта ([expr.add]), адрес функции или значение нулевого указателя и
  • , если значение является объектом класс или тип массива, каждый подобъект удовлетворяет этим ограничениям для значения.

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

blockquote>

Если бы массив был статическим объектом, тогда этот инициализатор представлял бы собой допустимое константное выражение, которое можно использовать для инициализации объекта constexpr. Так как std::initializer_list влияет на время жизни на это временное действие с помощью [dcl.init.list] / 6 , когда вы объявляете group1 как статический объект , clang и gcc Кажется, массив также выделяется как статический объект, что делает правильную инициализацию подчиненной только тому, является ли std::initializer_list литеральным типом, а используемый конструктор - constexpr.

В конечном счете, все это немного мутно.

7
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

Посмотрите этот вопрос: Преобразуйте HTML назад в Скидку с цены для редактирования в WMD (yay для поля "Related", справа военно-морского!).

5
ответ дан 6 December 2019 в 19:43
поделиться

Я отправил бы данные как скидку с цены и затем позволил бы серверу преобразовать его в HTML, когда проверки передали. WMD имеет опцию указать формат данных, которые это отправит на сервер. Просто добавьте

wmd_options = {
        //Markdown or HTML
        output: "Markdown"
    };

Перед вызовом к WMD

5
ответ дан 6 December 2019 в 19:43
поделиться

Я только посмотрел на WMD на поверхностном уровне, но представление текстовой области к серверу кажется довольно прямым - на самом деле, я едва вижу, как Вы могли избежать его, если текстовая область является частью Вашей формы. Насколько я понимаю Ваша текстовая область содержит разметку, и WMD преобразовывает ее в HTML для дисплея в другой части Вашей страницы. Просто включайте текстовую область в форму, которая отправлена, и необходимо видеть его на стороне сервера.

3
ответ дан 6 December 2019 в 19:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: