Используется std::vector<>
, потому что std::vector<>
обычно выделяет больше памяти, чем objects
в vector<>
.
&
можно использовать только для переменных (включая элементы массива или члены структуры) - более формально называемые lvalues . По сути, вы можете использовать его на всем, что может быть на левой стороне =
(именно так lvalues получили свое имя). Вы не можете сделать, например, &(1 + 1)
. Вы также не можете сделать &(&some_variable)
по той же причине: &some_variable
не является lvalue.
Легко видеть, что это не lvalues, как нельзя было сделать 1 + 1 = something;
или &some_variable = something;
.
У вас есть &((struct c*)(&((struct a*)0)->y)->j)
. Или упрощенно, &(&(something))
. Это недействительно Я не знаю, что пытается сделать функция, но, возможно, вы использовали две &
вместо одной по простой ошибке.