NVRO works by constructing the object once...
(EDIT: detrino points out this is wrong, the object is not constructed first before passing, it is only a memory address that is passed, it's the return value that is constructed on to this address)
It is passed as a hidden argument to the function, assigning the return value to that argument passed in.
Prior to the NVRO, the object was constructed once, a temporary was constructed and then copy constructed to give the result.
You can test out the NVRO yourself by putting a printf in an object's constructor, and have the object returned from a function on to an object of the same type.
Stan Lipmann's Inside the C++ Object Model explained it best for me. NVRO applies to the vector object.
The difference here is that Stroustrup is talking about the elements of the vector, not the vector itself, and how the move semantics remove the need for constructing/copy constructing them.