The first form goes back to C time, and the second goes back to C ++. The reason for the addition is that in some contexts (in particular, initializer lists in constructors) the first form is not allowed.
, , . , . - .
?
, , .
, , , -- . ( ), , :
std::string s = std::string();
std::string s( std::string() );
, ++ 11 , :
std::string s{std::string{}};
, .
?
, . , , , , ...