Переменная buffer
построена именно на этой строке:
Vector<char, 4096> buffer(fragmentEnd * 3 + 1);
Проходя шаги, которые выполняет компилятор, он сначала гарантирует, что в стеке есть sizeof(Vector<char, 4096>)
байтов пространства, в которое он может построить объект Vector<char, 4096> buffer
. Затем он вызывает конструктор Vector<char, 4096>
, который может занять int
(поскольку fragmentEnd * 3 + 1
является int
) в хранилище в стеке.
В текущих Vector
источниках нет конструктора, который принимает int
. Однако существует конструктор, который принимает size_t
(без знака int
), поэтому компилятор статически преобразует результат fragmentEnd * 3 + 1
в size_t
и вызывает этот конструктор.