are two different objects. Data member B is an empty constant string that have storage duration until an object of the class exists. Local variable B inside the constructor has automatic storage duration and is destroyed after the constructor will finish his work.
Const data member has to be initialized in the constructor. Each instance of A will have their own B (so each A::B can hold a different value).
If the implementation defines const string A::B = "foo";, then A::B is initialized exactly once, not in constructor, and it will be initialized even if no A is ever created within the program. Therefore, yes, A::B is/should/must be a static member variable.
Static member variable is like a global variable, but has the benefit of being accessible only by those, who can access members of A.