2016-07-18 31 views
3

次の2行のコードに違いはありますか?<<演算子とC++の文字列のオーバーロード+演算子

(おそらく効率やその自然の何かで?)

const std::string a = "a"; 
const std::string b = "b"; 

std::cout << a << " comes before " << b << "\n"; 
std::cout << a + " comes before " + b + "\n"; 
+1

私はそれがコンパイラに依存していると思いますが、最初のものは単純に 'output a;出力文字列。出力b。出力文字列 'とし、2番目は' create string a、文字列の連結、var bの連結、文字列の連結、出力された文字列の出力 ' –

+0

はい。違いがあります。 –

答えて

10

はい:

最初の行は(タイプstd::ostreamの)std::coutoperator<<を呼び出します。各オペランドを出力します。

operator+std::stringで、複数の一時的なオブジェクトstd::stringが作成され、最後にoperator<<が出力されます。

一時オブジェクトを避け、よりうまく動作するため、最初を優先します。状況がabの場合は、intとします。最初のバージョンは動作し続け、2番目のバージョンは動作しなくなります。

関連する問題