C++編で扱っている C++ は 2003年に登場した C++03
という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14
-> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++
の学習を始めるのなら、C++11
よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい
C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
問題① 任意の型の数値を文字列に変換する関数テンプレートを実装してください。
ostringstream を利用します。
#include <iostream>
#include <sstream>
namespace {
template <typename T>
std::string to_string(T num)
{
std::ostringstream oss;
<< num << std::flush;
oss return oss.str();
}
}
int main()
{
std::string s1(to_string(123));
std::string s2(to_string(4.5));
std::string s3(to_string(999U));
std::string s4(to_string(-999L));
std::cout << s1 << "\n"
<< s2 << "\n"
<< s3 << "\n"
<< s4 << std::endl;
}
実行結果:
123
4.5
999
-999
ostringstream<>::strメンバ関数が返す文字列は、ストリームが保持している文字列のコピーなので、このサンプルプログラムのように、関数テンプレート(通常の関数でも)から return しても、無効になってしまうことはなく、問題ありません。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |