一番上がいちばん遅い。

#include <iostream>
#include <string>
#include <time.h>
using namespace std;

string fnc1() { return string(1<<16, '\0'); }
void fnc2(string &s) { s=string(1<<16, '\0'); }
void fnc3(string &s) { s.assign( 1<<16, '\0' ); }

int main() {
int c,n, N=100000; string s;
c=clock(); for(n=0; n<N; n++) s=fnc1(); c=clock()-c; cout<<c<<endl;
c=clock(); for(n=0; n<N; n++) fnc2(s); c=clock()-c; cout<<c<<endl;
c=clock(); for(n=0; n<N; n++) fnc3(s); c=clock()-c; cout<<c<<endl;
getchar(); return 0; }