The "" will define a null terminated char array to represent the string. But as it string contains no text it's a char array that only requires one byte (i.e. it contains nothing but the null termination character).
Now the first character of that char array is found here: ""[0]
The second character is found here: ""[1]
So the address of the second character is found here: &""[1]
But as the string was represented by one byte char array that second address is past the end of the string.
No, the address itself is not invalid, you're just not allowed to dereference it. Pointers have to point at a valid object or, in the case of arrays, one past the end of the array. It's what `std::end` returns