В вашем случае mat.resize(len+2,NoChange)
тоже не сработает. Это должно утверждать, если вы не отключили утверждения, в этом случае это ничего не будет делать.
Ref
не позволяет изменять размер, поскольку он не «владеет» памятью, на которую он указывает - например, он может указывать на block
другой матрицы или на Map
некоторой внешней памяти, выделенной .
Причина, по которой разрешен вызов resize
, заключается в том, что в некотором универсальном коде (в том числе внутри самого Eigen) сначала изменяются размеры матриц, а затем присваиваются значения. Защищать это какой-то isResizeable
логикой везде было бы беспорядком.