Составные литералы являются конструкцией C99. Хотя я могу сделать это в C ++:
#include <iostream>
using namespace std;
int main() {
for (auto i : (float[2]) {2.7, 3.1}) cout << i << endl;
}
Кажется, что, например, MSVC поддерживает это как продолжение. Тем не менее, все компиляторы, которые я могу получить, скомпилируют вышеупомянутый код.
Так эта функция доступна в C ++ 14 ? Есть ли другой стандартный термин (мне кажется, что я просто создаю временную инициализацию с использованием фигурных скобок)?
Примечание : «Составные литералы» (или как я бы назвал выше) являются контекст расширения пакета (просто чтобы упомянуть функциональность)
Это расширение, которое как НКУ а также clang
служба поддержки. В документе gcc говорится:
В качестве расширения GCC поддерживает составные литералы в режиме C90 и в C ++, хотя семантика в C ++ несколько отличается.
если вы строите с -педантичный вы должны получить предупреждение, например clang
говорит (увидеть это в прямом эфире):
предупреждение: составные литералы являются специфической особенностью C99 [-Wc99-extensions]
Обратите внимание, что семантические различия в C ++ не являются незначительными, и код, который будет четко определен в C99, может иметь неопределенное поведение в C ++ с этим расширением:
В C ++ составной литерал обозначает временный объект, который только
живет до конца своего полного самовыражения. В результате четко определены
C-код, который принимает адрес подобъекта составного литерала
быть неопределенным в C ++.
(float[2]) {2.7, 3.1}
является составным литералом C99. Некоторые компиляторы поддерживают его в C ++ как расширение.
float[2] {2.7, 3.1}
это синтаксическая ошибка
Дано using arr = float[2];
,
arr {2.7, 3.1}
допустим C ++, который инициализирует список временным массивом из двух float
s.
{2.7, 3.1}
называется приготовился-INIT-лист.
Наконец, для вашего кода,
for (auto i : {2.7, 3.1}) cout << i << endl;
работает одинаково хорошо и совершенно правильно C ++ — это создает std::initializer_list<double>
под капотом. Если вы действительно хотите float
s, добавить f
суффикс к числам.