The line probably comes from a copy/paste. It is common in designs that stick to pure numeric_std. Basically, when IEEE defined how math should be done in VHDL, they decided that "+" would only apply to types that explicitly represent a number. Other decisions meant that types representing numbers would need to be recast to vector types. Synopsys previously created a std_logic_arith, and std_logic_unsigned package that could be used to get behavior similar to Verilog -- where vectors of bits are treated as unsigned values and have a "+" operation. However, other vendors also created their own libraries leading to compatibility issues that the numeric_std library was to resolve. Today, the synopsys and ieee libraries are both well supported for FPGAs.
I've always felt the decision to restrict "+" to only declared numeric types was a mistake*. It leads to the line of code you have here -- because "cnt" is used as a std_logic_vector the code would either need to declare "cnt" as an unsigned and then cast it to a std_logic_vector every time it is used, or would declare it as a slv and do the cast-add-recast seen here. The latter case restricts the micromanagement of types to a single line.
* it doesn't add any benefits to code readability. It adds another distraction to the developer. For anyone who declares cnt as an unsigned, it also removes warnings when unequal length vectors are compared ("01" = "00001" for an unsigned comparison as 1 = 1). (using std_logic_unsigned.all will also redefine "=" for slv to have this meaning).