std::string の操作についてお聞きしたいのですが、

char hoge[10] = { ... };
string s( 10, '\0' );
memcpy( &s[0], hoge, 10 );

というのは有効な操作ですか? 有効である場合、これは

s.assign( hoge, 10 );

と同じ効果が得られるでしょうか。