Std :: initializer_list, подготовленная инициализация и заголовокC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std :: initializer_list, подготовленная инициализация и заголовок

Сообщение Anonymous »

Во время чтения о другой теме я наткнулся на странное поведение, по крайней мере, для меня.
Вся эта мысль возникла из -за особых взаимодействий между Auto < /code> и скобками. Если вы напишите что -то вроде: < /p>

Код: Выделить всё

auto A = { 1, 2, 3 }
Компилятор выведет как std :: initializer_list . Странно то, что аналогичное правило применяется не только к Auto < /code>, где для него могут быть особые причины, но и к другим вещам.
Если вы пишете следующее: < /p>

Код: Выделить всё

template
void f(std::vector Vector)
{
// do something
}
< /code>

Вы, конечно, не можете назвать это таким образом: < /p>

f({ 1, 2, 3});
< /code>

Даже если std :: vector < /code> может быть инициализирован. Однако, если вы замените std :: vector 
на std :: initializer_list , вызов работает, а компилятор правильно выведет int как тип t . Однако более интересно, что в первом случае вам нужно #include , в последнем вам не нужно #include . Это заставило меня задуматься, и после теста я каким -то образом осознал std :: initiazer_list не нужен свой собственный заголовок, так что он в некотором роде является частью функций «базовые». a Operator () ). Другими словами, неназванные определения привязки должны по умолчанию с std :: initializer_list < /code> точно так же, как лямбдас (в основном) неназванные вызываемые объекты. Более того, может ли это поведение измениться, и, если да, то как? Однако остается вопрос: почему звонок работает для std :: initializer_list , а не для std :: ecector ?

Подробнее здесь: https://stackoverflow.com/questions/529 ... and-header
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»