- 484 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:56:44 ]
- const std::string& GeRefOfFuncStaticString(int n)
{ static std::string str = boost::lexical_cast<std::string>(n); return str; } const std::string g_strNotFound("NotFound"); const std::string& GeRefOfFuncStaticString2(int n) { static std::map<int,std::string> mapStr; if( mapStr.empty() ) { mapStr.insert( std::make_pair(100, "100") ); mapStr.insert( std::make_pair(101, "101") ); } std::map<int,std::string>::const_iterator itrFound = mapStr.find(n); return itrFound != mapStr.end() ? itrFound->second : g_strNotFound; } int _tmain(int argc, _TCHAR* argv[]) { std::cout << GeRefOfFuncStaticString( 100 ) << std::endl; // 表示: 100 std::cout << GeRefOfFuncStaticString( 101 ) << std::endl; // 表示: 100 ← 関数内の static 変数の参照を取り出せない std::cout << GeRefOfFuncStaticString2( 100 ) << std::endl; // 表示: 100 std::cout << GeRefOfFuncStaticString2( 101 ) << std::endl; // 表示: 101 return 0; } map を使った場合の GeRefOfFuncStaticString2( ) は意図した動作になるんですが,たまたまでしょうか?
|

|