【C++入門】cin・cout・cerrストリームの基本と使い方を徹底解説
C++の標準入出力ストリームとは?
C++におけるcin、cout、cerr、clogは、標準入力と標準出力を扱うためのストリームです。これらはすべて、iostreamヘッダファイルで定義されているストリームオブジェクトであり、C++プログラミングにおける入出力処理の基礎となります。
std::cin(標準入力ストリーム)
std::cinは、istreamクラスのオブジェクトで、char型などのナロー文字に対応した標準入力ストリームを表します。C言語のstdinに相当します。標準入力ストリームは、環境によって決定される文字の入力元であり、通常はキーボードやファイルなど外部ソースからの入力とみなされます。
std::cout(標準出力ストリーム)
std::coutは、ostreamクラスのオブジェクトで、ナロー文字に対応した標準出力ストリームを表します。C言語のstdoutに相当します。標準出力ストリームは、環境によって決定される文字の出力先であり、この出力先はcerrやclogなど他の標準オブジェクトと共有される場合があります。
std::cerr(標準エラー出力ストリーム)
cerrオブジェクトは、<cstdio>ヘッダで宣言されているstderrに関連付けられたストリームバッファへの出力を制御します。主に、エラーメッセージを標準エラー出力へ出力するために使用されます。
cerrとclogの違い
cerrとclogはどちらも標準エラー出力に対応していますが、挙動が異なります。cerrはバッファリングされず、即座に出力されるのに対し、clogはバッファリングされる点が特徴です。デバッグ時など、エラーをすぐに確認したい場合はcerrを使用するのが一般的です。
補足: iostreamヘッダで宣言されたすべてのオブジェクトには、特別な性質があります。<iostream>をインクルードしている翻訳単位では、これらのオブジェクトはユーザーが定義した静的オブジェクトよりも前に構築され、それらのデストラクタよりも後に破棄されると想定できます(ただし、出力ストリーム自体はプログラム終了時にフラッシュされます)。そのため、プログラム起動前後においても標準ストリームへの読み書きを安全に行えます。
実際の使用例
これらのストリームオブジェクトは、次のように使用できます。
#include<iostream>
int main() {
int my_int;
std::cin >> my_int;
std::cout << my_int;
std::cerr << "エラーメッセージ";
return 0;
}
このプログラムを「hello.cpp」という名前で保存します。続いて、ターミナル(Windowsの場合はコマンドプロンプト)でファイルの保存先ディレクトリへ移動し、以下のコマンドでコンパイルします。
$ g++ hello.cpp
コンパイルが完了したら、次のコマンドで実行します。
$ ./a.out
実行結果
キーボードから入力として「15」を与えると、次のような出力が得られます。
15 エラーメッセージ
この例では、std::cinによって整数値を読み込み、std::coutでその値を出力し、最後にstd::cerrでエラーメッセージを出力しています。このように、用途に応じて適切なストリームを使い分けることで、可読性が高く保守しやすいプログラムを作成できます。
-
C++のsigned(符号付き)とunsigned(符号なし)キーワードとは?違いと使い方を解説
C++における符号付き・符号なしデータ型の基本C++では、すべての数値型に対して「符号付き(signed)」か「符号なし(unsigned)」かを指定できます。たとえば、int型を宣言する際に正の整数のみを扱うよう指定することも可能です。特別な指定がない場合、すべての整数型はデフォルトで符号付き(signed)として扱われます。つまり、正負どちらの値も保持できるということです。一方、unsignedキーワードを使用すると、符号を持たない変数を宣言できます。サンプルコード#include<iostream>using namespace std;int main() { &
-
C++標準ライブラリとは?主要コンポーネントと特徴を徹底解説
C++標準ライブラリの概要 C++プログラミング言語における標準ライブラリ(C++ Standard Library)とは、コア言語で記述され、C++ ISO標準規格の一部として定義されているクラスや関数のコレクションです。 標準ライブラリを活用することで、開発者は以下のような機能を追加実装の手間なく利用できます。 汎用コンテナと、それらを操作するための関数 関数オブジェクト 汎用的な文字列やストリーム(対話型I/OやファイルI/Oを含む) 一部の言語機能のサポート 数値の平方根を求めるなど、日常的なタスクのための関数 C++標準ライブラリの主な構成要素 1. ストリーム(Streams)