Short answer: performances should be the same if copy elision is performed. Otherwise the latter should probably be faster.
Long answer:
This code
std::string s = std::string("Hello")
should call a move constructor in C++11+ code (it requires an accessible one). Anyway copy elision is allowed in this case, although not mandated (cfr. [class.copy]/p31)
When
certain criteria are met, an implementation is allowed to omit the
copy/move construction
These are concepts that were already present in pre-C++11 though (they applied to copy constructors as well).
As to the performances question:
The standard also describes a few situations where copying can be eliminated even if this would alter the program's behavior, the most common being the return value optimization. Another widely implemented optimization, described in the C++ standard, is when a temporary object of class type is copied to an object of the same type.[1] As a result, copy-initialization is usually equivalent to direct-initialization in terms of performance, but not in semantics; copy-initialization still requires an accessible copy constructor.[2]
Source - Copy elision
If copy elision doesn't take place (e.g. it has been disabled in gcc via -fno-elide-constructors
or for whatever reason the compiler won't perform it) then performances will probably not be the same and direct initialization should be faster (in this case for std::string
SSO might also take a toll on the move)