Здравствуйте, наткнулся на интересную (для меня) фичу С++11 в 13-ой студии (может и не только там, но пока с другими компиляторами по С++11 не работал). Такой код:
void f()
{
std::vector<std::pair<int, float>> x;
x.push_back({1, 10.0f});
}
Я так написал, и оно заработало. Не врубаюсь, чес сказать, почему. Дебаггер заходит в такой конструктор:
template<class _Other1,
class _Other2,
class = typename enable_if<is_convertible<_Other1, _Ty1>::value
&& is_convertible<_Other2, _Ty2>::value,
void>::type>
pair(_Other1&& _Val1, _Other2&& _Val2)
_NOEXCEPT_OP((is_nothrow_constructible<_Ty1, _Other1&&>::value
&& is_nothrow_constructible<_Ty2, _Other2&&>::value))
: first(_STD forward<_Other1>(_Val1)),
second(_STD forward<_Other2>(_Val2))
{ // construct from moved values
}
Он явно принимает два значения. И я не понимаю:
1. Что такое {1, 10.0f} в данном случае? Это же не список инициализации (там аргументы однотипные). При попытке вытащить тип через auto или decltype получаю странные ошибки.
2. Как это что-то смогло пролезть в конструктор с двумя аргументами?
3. Насколько такое поведение стандартно?
Здравствуйте, Went, Вы писали:
W>1. Что такое {1, 10.0f} в данном случае? Это же не список инициализации (там аргументы однотипные). При попытке вытащить тип через auto или decltype получаю странные ошибки.
https://ru.wikipedia.org/wiki/C%2B%2B11#.D0.A3.D0.BD.D0.B8.D0.B2.D0.B5.D1.80.D1.81.D0.B0.D0.BB.D1.8C.D0.BD.D0.B0.D1.8F_.D0.B8.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F
Мне просто интересно. "-1" означает несогласие с мнением автора поста. С какой строчкой конкретно вы готовы спорить? Вы спорите с моим незнанием языка?
Здравствуйте, Sni4ok, Вы писали:
W>>С какой строчкой конкретно вы готовы спорить?
S>я не abyx, но ответ на ваш вопрос гуглится за 15 секунд.
Если глядя на этот код сразу хочется загуглить "uniform initialization C++11", то всё здорово — за 15 секунд можно уложиться.
x.push_back({1, 10.0f});
Здравствуйте, Went, Вы писали:
W>Мне просто интересно. "-1" означает несогласие с мнением автора поста. С какой строчкой конкретно вы готовы спорить? Вы спорите с моим незнанием языка?
Он слишком крут что бы отвечать на простые вопросы, но слишком вежлив (или ленив) что бы писать RTFM. Поэтому ставит минус
Здравствуйте, Went, Вы писали:
W>Мне просто интересно. "-1" означает несогласие с мнением автора поста. С какой строчкой конкретно вы готовы спорить? Вы спорите с моим незнанием языка?
Странно, вроде бы Вы давно на формуе, и до сих пор не знаете о риторическом характере сабжа?