numbers.push_back({1, 2});
а как вы вообще знаете? вот как понять, что именно так нужно писать?
просто пишу все виды скобок подряд пока не скомпилируется
Видимо потому, что pair — агрегатный тип, а {...} — агрегатная инициализация.
1) нужно создать временный объект, чтобы передать его в push_back 2) numbers это контейнер, который знает тип своего элемента, соответственно проблем с выводом типа временного объекта не будет в итоге vector.push_back({a, b, c}) это «(компилятору) создай временный объект сам знаешь какого типа из a, b, c и (контейнеру) добавь/перемести его в конец вектора»
можно подумать, оно бы не работало, не будь pair агрегатом
Имел бы соответствующий конструктор — работало бы, не имел бы — не работало бы. Но мы же сейчас не про "бы".
речь о том, что возможность использовать в том контексте фигурные скобки едва ли зависит от того, является ли тип агрегатом
В том контексте, как и во многих других, стоит посмотреть, что принимает функция и решить, как и откуда это брать. В данном случае функция принимает объект, и нужно его либо откуда-то взять, либо сконструировать. Во втором случае открывается весьма обширная тема возможностей, часть из которой озвучили выше очень многие.
Обсуждают сегодня