cout << "Hello, World!";
использует перегрузку operator<< связанная с массивом символов, заканчивающимся нулем "hello", который представляет собой const char[6], на const char* при передаче в качестве аргумента operator<< :
template< class CharT, class Traits >
basic_ostream<CharT,Traits>& operator<<( basic_ostream<CharT,Traits>& os,
const char* s );
cout << string("Hello, World!"); использует оператор<< перегрузка для работы со строками.
string - это typedef для std::basic_string<char, std::char_traits<char>, std::allocator<char>>.