C++でサンプルを動かしていて、少し躓いたというか疑問が浮かんだので質問させていただきます。
以下のコードを動かしていました。
lang
1#include <iostream> 2template < typename Func > 3void f( Func func ) 4{ 5 func( "fuga" ); 6} 7 8int main( void ) 9{ 10 std::string x = "hoge"; 11 f( [&]( std::string const & str ) { x += str; } ); 12 std::cout << x << std::endl; 13 return 0; 14}
上記のコードは、coutの<<演算子でstringクラス用の<<演算子は無いとエラーになります。
lang
1#include <string>
を忘れているのが原因です。
char型用<<演算子を使ってx.c_str()にすれば動きますが、疑問はそこではなく、
**「#include <string>忘れていたのに、なんでstringクラスのインスタンス(?)が作れているのか」**が疑問なのです。
lang
1std::string x = "hoge";
上記の箇所でエラーにならなかったのが、少し腑に落ちないというか……
そこで
1.#include<string>忘れたのにstringクラスを生成できているのは何故?
2.std::つければどの程度の操作が出来るの?
というのを教えていただければと思います。
いや、定義ファイル読めやって話なんですども。
Visual Studio 2013でstd空間覗くとstringファイルを見てるのは分かりましたが、
stringクラスはxstringファイルを見てるみたいですし、
だんだん何処に何が管理されているのか分からなくなってしまったのです。
他にも「こういうの知っとけば理解進むかもね」というのがあればうれしいです。
どうか、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。