From e1492a0caedf2f4606f88cbf853de02dcaf0802e Mon Sep 17 00:00:00 2001 From: rotarymars Date: Wed, 8 Apr 2026 14:11:49 +0900 Subject: [PATCH 1/3] created wcout.md, removed duplicated details in cout, and fixed nolink --- lang/cpp11/string_literal_concatenation.md | 2 +- reference/ios/basic_ios/narrow.md | 2 +- reference/ios/basic_ios/tie.md | 6 +- reference/ios/basic_ios/widen.md | 2 +- reference/ios/ios_base/Init.md | 2 +- reference/ios/ios_base/Init/op_constructor.md | 4 +- reference/ios/ios_base/Init/op_destructor.md | 4 +- reference/ios/ios_base/sync_with_stdio.md | 2 +- reference/iostream.md | 8 ++ reference/iostream/cout.md | 72 +---------- reference/iostream/wcout.md | 115 ++++++++++++++++++ reference/ostream/basic_ostream.md | 2 +- .../ostream/basic_ostream/op_ostream_free.md | 2 +- 13 files changed, 139 insertions(+), 84 deletions(-) create mode 100644 reference/iostream/wcout.md diff --git a/lang/cpp11/string_literal_concatenation.md b/lang/cpp11/string_literal_concatenation.md index 6d76c39161..d220f213bc 100644 --- a/lang/cpp11/string_literal_concatenation.md +++ b/lang/cpp11/string_literal_concatenation.md @@ -29,7 +29,7 @@ int main() std::wcout << s2 << std::endl; } ``` -* std::wcout[link /reference/iostream/cout.md] +* std::wcout[link /reference/iostream/wcout.md] ### 出力 ``` diff --git a/reference/ios/basic_ios/narrow.md b/reference/ios/basic_ios/narrow.md index e13645a08a..7da35a613d 100644 --- a/reference/ios/basic_ios/narrow.md +++ b/reference/ios/basic_ios/narrow.md @@ -33,7 +33,7 @@ int main() } ``` * narrow[color ff0000] -* std::wcout[link ../../iostream/wcout.md.nolink] +* std::wcout[link ../../iostream/wcout.md] ### 出力 ``` diff --git a/reference/ios/basic_ios/tie.md b/reference/ios/basic_ios/tie.md index 84a466cad6..748634f96b 100644 --- a/reference/ios/basic_ios/tie.md +++ b/reference/ios/basic_ios/tie.md @@ -39,9 +39,9 @@ basic_ostream* tie(basic_ostream* tiestr); // ( なお、この要件は「`tie` に設定した後でこのようになってはいけない」という意味であるものと思われる。(さもないと、設定したことによって無限ループが生じることを防げない) - 標準入出力ストリームは、以下のような設定が行われている。 - [`cin`](../../iostream/cin.md)`.tie() == &`[`cout`](../../iostream/cout.md) - - [`wcin`](../../iostream/wcin.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md.nolink) + - [`wcin`](../../iostream/wcin.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md) - [`cerr`](../../iostream/cerr.md)`.tie() == &`[`cout`](../../iostream/cout.md)(C++11 から) - - [`wcerr`](../../iostream/wcerr.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md.nolink)(C++11 から) + - [`wcerr`](../../iostream/wcerr.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md)(C++11 から) ## 例 @@ -102,7 +102,7 @@ new - [`cout`](../../iostream/cout.md) - [`cerr`](../../iostream/cerr.md) - [`wcin`](../../iostream/wcin.md.nolink) -- [`wcout`](../../iostream/wcout.md.nolink) +- [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`basic_istream`](../../istream/basic_istream.md)`::`[`sentry`](../../istream/basic_istream/sentry.md)`::`[`sentry`](../../istream/basic_istream/sentry/op_constructor.md) - [`basic_ostream`](../../ostream/basic_ostream.md)`::`[`sentry`](../../ostream/basic_ostream/sentry.md)`::`[`sentry`](../../ostream/basic_ostream/sentry/op_constructor.md) diff --git a/reference/ios/basic_ios/widen.md b/reference/ios/basic_ios/widen.md index a2d712f027..7960549ae2 100644 --- a/reference/ios/basic_ios/widen.md +++ b/reference/ios/basic_ios/widen.md @@ -32,7 +32,7 @@ int main() std::wcout << c1 << L", " << c2 << L'\n'; } ``` -* std::wcout[link ../../iostream/wcout.md.nolink] +* std::wcout[link ../../iostream/wcout.md] * widen[color ff0000] ### 出力 diff --git a/reference/ios/ios_base/Init.md b/reference/ios/ios_base/Init.md index 665d246988..fa3092d33d 100644 --- a/reference/ios/ios_base/Init.md +++ b/reference/ios/ios_base/Init.md @@ -46,6 +46,6 @@ namespace std { - [`cerr`](../../iostream/cerr.md) - [`clog`](../../iostream/clog.md) - [`wcin`](../../iostream/wcin.md.nolink) -- [`wcout`](../../iostream/wcout.md.nolink) +- [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`wclog`](../../iostream/wclog.md.nolink) diff --git a/reference/ios/ios_base/Init/op_constructor.md b/reference/ios/ios_base/Init/op_constructor.md index f3d01ac9dd..071bd15ba8 100644 --- a/reference/ios/ios_base/Init/op_constructor.md +++ b/reference/ios/ios_base/Init/op_constructor.md @@ -14,7 +14,7 @@ Init(); ## 効果 `Init` クラスのオブジェクトを構築する。 -[`cin`](../../../iostream/cin.md)、[`cout`](../../../iostream/cout.md)、[`cerr`](../../../iostream/cerr.md)、[`clog`](../../../iostream/clog.md)、[`wcin`](../../../iostream/wcin.md.nolink)、[`wcout`](../../../iostream/wcout.md.nolink)、[`wcerr`](../../../iostream/wcerr.md.nolink)、[`wclog`](../../../iostream/wclog.md.nolink) の 8 つのオブジェクトが構築・初期化されていなければ、それらの構築・初期化を行う。 +[`cin`](../../../iostream/cin.md)、[`cout`](../../../iostream/cout.md)、[`cerr`](../../../iostream/cerr.md)、[`clog`](../../../iostream/clog.md)、[`wcin`](../../../iostream/wcin.md.nolink)、[`wcout`](../../../iostream/wcout.md)、[`wcerr`](../../../iostream/wcerr.md.nolink)、[`wclog`](../../../iostream/wclog.md.nolink) の 8 つのオブジェクトが構築・初期化されていなければ、それらの構築・初期化を行う。 ## バージョン @@ -35,6 +35,6 @@ Init(); - [`cerr`](../../../iostream/cerr.md) - [`clog`](../../../iostream/clog.md) - [`wcin`](../../../iostream/wcin.md.nolink) -- [`wcout`](../../../iostream/wcout.md.nolink) +- [`wcout`](../../../iostream/wcout.md) - [`wcerr`](../../../iostream/wcerr.md.nolink) - [`wclog`](../../../iostream/wclog.md.nolink) diff --git a/reference/ios/ios_base/Init/op_destructor.md b/reference/ios/ios_base/Init/op_destructor.md index 6df9b86e5e..1c889dd27f 100644 --- a/reference/ios/ios_base/Init/op_destructor.md +++ b/reference/ios/ios_base/Init/op_destructor.md @@ -14,7 +14,7 @@ ## 効果 `Init` クラスのオブジェクトを破棄する。 -`Init` クラスのインスタンスが他に無かった場合、[`cout`](../../../iostream/cout.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`cerr`](../../../iostream/cerr.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`clog`](../../../iostream/clog.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wcout`](../../../iostream/wcout.md.nolink)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wcerr`](../../../iostream/wcerr.md.nolink)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wclog`](../../../iostream/wclog.md.nolink)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()` を呼び出す。 +`Init` クラスのインスタンスが他に無かった場合、[`cout`](../../../iostream/cout.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`cerr`](../../../iostream/cerr.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`clog`](../../../iostream/clog.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wcout`](../../../iostream/wcout.md)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wcerr`](../../../iostream/wcerr.md.nolink)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()`、[`wclog`](../../../iostream/wclog.md.nolink)`.`[`flush`](../../../ostream/basic_ostream/flush.md)`()` を呼び出す。 ## バージョン @@ -33,7 +33,7 @@ - [`cout`](../../../iostream/cout.md) - [`cerr`](../../../iostream/cerr.md) - [`clog`](../../../iostream/clog.md) -- [`wcout`](../../../iostream/wcout.md.nolink) +- [`wcout`](../../../iostream/wcout.md) - [`wcerr`](../../../iostream/wcerr.md.nolink) - [`wclog`](../../../iostream/wclog.md.nolink) - [`basic_ostream`](../../../ostream/basic_ostream.md)`::`[`flush`](../../../ostream/basic_ostream/flush.md) diff --git a/reference/ios/ios_base/sync_with_stdio.md b/reference/ios/ios_base/sync_with_stdio.md index 1cd8540970..1f145092f9 100644 --- a/reference/ios/ios_base/sync_with_stdio.md +++ b/reference/ios/ios_base/sync_with_stdio.md @@ -61,7 +61,7 @@ int main() - [`cerr`](../../iostream/cerr.md) - [`clog`](../../iostream/clog.md) - [`wcin`](../../iostream/wcin.md.nolink) - - [`wcout`](../../iostream/wcout.md.nolink) + - [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`wclog`](../../iostream/wclog.md.nolink) - C 言語ライブラリの標準ストリームオブジェクト diff --git a/reference/iostream.md b/reference/iostream.md index e9c9fdfa19..883b17c58f 100644 --- a/reference/iostream.md +++ b/reference/iostream.md @@ -22,7 +22,15 @@ | [`cout`](iostream/cout.md) | マルチバイト文字による標準出力 | | | [`clog`](iostream/clog.md) | マルチバイト文字による標準エラー出力 | | | [`cerr`](iostream/cerr.md) | マルチバイト文字による標準エラー出力(バッファリング無し) | | +<<<<<<< HEAD | [`wcin`](iostream/cin.md) | ワイド文字による標準入力 | | | [`wcout`](iostream/cout.md) | ワイド文字による標準出力 | | +||||||| parent of 36310447d (temp) +| [`wcin`](iostream/wcin.md) | ワイド文字による標準入力 | | +| [`wcout`](iostream/cout.md) | ワイド文字による標準出力 | | +======= +| [`wcin`](iostream/wcin.md) | ワイド文字による標準入力 | | +| [`wcout`](iostream/wcout.md) | ワイド文字による標準出力 | | +>>>>>>> 36310447d (temp) | [`wclog`](iostream/clog.md) | ワイド文字による標準エラー出力 | | | [`wcerr`](iostream/cerr.md) | ワイド文字による標準エラー出力(バッファリング無し) | | diff --git a/reference/iostream/cout.md b/reference/iostream/cout.md index ed878e357d..0cf533df03 100644 --- a/reference/iostream/cout.md +++ b/reference/iostream/cout.md @@ -6,18 +6,17 @@ ```cpp namespace std { extern ostream cout; - extern wostream wcout; } ``` * ostream[link ../ostream/basic_ostream.md] * wostream[link ../ostream/basic_ostream.md] ## 概要 -`cout`も`wcout`も、標準出力に対する出力ストリームオブジェクトである。 +`cout`は、標準出力に対する出力ストリームオブジェクトである。 すなわち、[`std::basic_streambuf`](../streambuf/basic_streambuf.md)から派生していて``の`stdout`オブジェクトに結びつけられているストリームバッファに出力する。 -`cout`は`character output`を意味する。また`wcout`は`wide character output`を意味する。[1] +`cout`は`character output`を意味する。 ## 例 ```cpp example @@ -39,73 +38,6 @@ Hello world ### 言語 - C++98 -### 備考 - -`wcout`は規格上実装しなければならないが、実装されていなかったり、期待どおりに動作しない事がある。 - -#### localeの設定 -望む出力を得るためにlocaleを再設定しなければならない場合がある。 - -例えばVisual Studioでは - -```cpp example -#include - -int main() -{ - std::wcout.imbue(std::locale("")); - //std::wcout.imbue(std::locale("ja")); - //std::wcout.imbue(std::locale("japanese")); - std::wcout << L"ありきたりな世界" << std::endl; -} -``` -* std::wcout[color ff0000] -* imbue[link /reference/ios/basic_ios/imbue.md] - -のようにして設定しないと何も表示されない。 - -`std::locale("")`とすると本来はOSに設定されたロケールが設定されるはずが、MinGW環境でコンパイルし実行すると、以下のようなエラーが出力されてしまう。 - -``` -terminate called after throwing an instance of 'std::runtime_error' - what(): locale::facet::_S_create_c_locale name not valid -``` - -一方、以下のようなコードなら求める結果が得られる処理系もある。 - -```cpp example -#include - -int main() -{ - std::ios_base::sync_with_stdio(false); - std::locale default_loc(""); - std::locale::global(default_loc); - std::locale ctype_default(std::locale::classic(), default_loc, std::locale::ctype); //※ - std::wcout.imbue(ctype_default); - std::wcout << L"ありきたりな世界" << std::endl; -} -``` -* std::wcout[color ff0000] -* imbue[link /reference/ios/basic_ios/imbue.md] - -このように求める結果を得るためのlocaleの設定は処理系によって大きく異なる。 - -#### 端末のロケールやフォントなど - -`wcout`を使ったとしても、結局`stdout`に出力するので、その標準出力を受け取って表示する端末のロケールやフォントなどの設定も考える必要がある。 - -##### Windows -Windowsでは`wchar_t`型といえばUTF-16でエンコードされた文字を指す。もし標準出力を受け取って表示するコンソールのロケールがUTF-8(65001)であるならばUTF-16からUTF-8への変換は一対一対応するため変換段階において問題は起きない。 - -しかしながらデフォルトのロケールがUTF-8(65001)ではない事が多い(日本語利用者なら932になっている事が多い)ため、そのロケールで対応していないUnicodeコードポイントは当然変換できないので文字化けする。`chcp 65001`などでUTF-8にすることができる。 - -こうしてUTF-8としてコンソールが文字列を受け取ったとしてもそれを正しく表示できるとは限らない。まずフォントが表示したい文字をすべて含んでいなければならない。またそうしたフォントを使えるようになっていなければならない。Windows10 1709より前では、ロケールをUTF-8にしたときのフォントの指定に制約があり、実質日本語を表示することは不可能だった。次に、🍣🍺のような色のついた絵文字を表示するためには、フォントの対応に加えて、それをDirectWriteなどを用いて描画されることが前提となる。例えばコマンドプロンプトはGDIで描画するため原理上不可能である。Microsoftが開発している[Windows Terminal](https://github.com/microsoft/terminal)ではこうした描画側の問題を克服しようとしている。 - -## 出典 - -1. **^** [Stroustrup: C++ Style and Technique FAQ](http://www.stroustrup.com/bs_faq2.html#cout)(2018-08-21 17:01 JST 閲覧) - ## 参照 - [使用できるロケール文字列](../../article/platform/locales.md) diff --git a/reference/iostream/wcout.md b/reference/iostream/wcout.md new file mode 100644 index 0000000000..c6328cacd6 --- /dev/null +++ b/reference/iostream/wcout.md @@ -0,0 +1,115 @@ +# wcout +* iostream[meta header] +* std[meta namespace] +* variable[meta id-type] + +```cpp +namespace std { + extern wostream wcout; +} +``` +* ostream[link ../ostream/basic_ostream.md] +* wostream[link ../ostream/basic_ostream.md] + +## 概要 +`wcout`は、標準出力に対するワイド文字用の出力ストリームオブジェクトである。 + +すなわち、[`std::basic_streambuf`](../streambuf/basic_streambuf.md)から派生していて``の`stdout`オブジェクトに結びつけられているストリームバッファに出力する。 + +`wcout`は`wide character output`を意味する。[1] + +## 例 +```cpp example +#include + +int main() +{ + std::wcout << L"Hello world" << std::endl; +} +``` +* std::wcout[color ff0000] + +### 出力 +``` +Hello world +``` + +## バージョン +### 言語 +- C++98 + +### 備考 + +`wcout`は規格上実装しなければならないが、実装されていなかったり、期待どおりに動作しない事がある。 + +#### localeの設定 +望む出力を得るためにlocaleを再設定しなければならない場合がある。 + +例えばVisual Studioでは + +```cpp example +#include + +int main() +{ + std::wcout.imbue(std::locale("")); + //std::wcout.imbue(std::locale("ja")); + //std::wcout.imbue(std::locale("japanese")); + std::wcout << L"ありきたりな世界" << std::endl; +} +``` +* std::wcout[color ff0000] +* imbue[link /reference/ios/basic_ios/imbue.md] + +のようにして設定しないと何も表示されない。 + +`std::locale("")`とすると本来はOSに設定されたロケールが設定されるはずが、MinGW環境でコンパイルし実行すると、以下のようなエラーが出力されてしまう。 + +``` +terminate called after throwing an instance of 'std::runtime_error' + what(): locale::facet::_S_create_c_locale name not valid +``` + +一方、以下のようなコードなら求める結果が得られる処理系もある。 + +```cpp example +#include + +int main() +{ + std::ios_base::sync_with_stdio(false); + std::locale default_loc(""); + std::locale::global(default_loc); + std::locale ctype_default(std::locale::classic(), default_loc, std::locale::ctype); //※ + std::wcout.imbue(ctype_default); + std::wcout << L"ありきたりな世界" << std::endl; +} +``` +* std::wcout[color ff0000] +* imbue[link /reference/ios/basic_ios/imbue.md] + +このように求める結果を得るためのlocaleの設定は処理系によって大きく異なる。 + +#### 端末のロケールやフォントなど + +`wcout`を使ったとしても、結局`stdout`に出力するので、その標準出力を受け取って表示する端末のロケールやフォントなどの設定も考える必要がある。 + +##### Windows +Windowsでは`wchar_t`型といえばUTF-16でエンコードされた文字を指す。もし標準出力を受け取って表示するコンソールのロケールがUTF-8(65001)であるならばUTF-16からUTF-8への変換は一対一対応するため変換段階において問題は起きない。 + +しかしながらデフォルトのロケールがUTF-8(65001)ではない事が多い(日本語利用者なら932になっている事が多い)ため、そのロケールで対応していないUnicodeコードポイントは当然変換できないので文字化けする。`chcp 65001`などでUTF-8にすることができる。 + +こうしてUTF-8としてコンソールが文字列を受け取ったとしてもそれを正しく表示できるとは限らない。まずフォントが表示したい文字をすべて含んでいなければならない。またそうしたフォントを使えるようになっていなければならない。Windows10 1709より前では、ロケールをUTF-8にしたときのフォントの指定に制約があり、実質日本語を表示することは不可能だった。次に、🍣🍺のような色のついた絵文字を表示するためには、フォントの対応に加えて、それをDirectWriteなどを用いて描画されることが前提となる。例えばコマンドプロンプトはGDIで描画するため原理上不可能である。Microsoftが開発している[Windows Terminal](https://github.com/microsoft/terminal)ではこうした描画側の問題を克服しようとしている。 + +## 出典 + +1. **^** [Stroustrup: C++ Style and Technique FAQ](http://www.stroustrup.com/bs_faq2.html#cout)(2018-08-21 17:01 JST 閲覧) + +## 参照 + +- [使用できるロケール文字列](../../article/platform/locales.md) +- [標準出力に書き込む | 株式会社きじねこ](https://web.archive.org/web/20191011112040/http://www.kijineko.co.jp/tech/cppsamples/stdout.html) +- [c++で日本語の処理(ロケール周り) 7/8追記 - nullnull7の日記](http://nullnull.hatenablog.com/entry/20120629/1340935277) +- [std::locale constructor modifies global locale via "setlocale()" | Microsoft Connect](http://web.archive.org/web/20100328154628/http://connect.microsoft.com:80/VisualStudio/feedback/details/492128/std-locale-constructor-modifies-global-locale-via-setlocale) +- [ASCII.jp:Windows 10に“まとも”に使えるコンソール「WindowsTerminal」が登場する (2/2)](https://ascii.jp/elem/000/001/868/1868623/2/) +- [`cout`](cout.md) diff --git a/reference/ostream/basic_ostream.md b/reference/ostream/basic_ostream.md index 7aa40f28cb..70a910c565 100644 --- a/reference/ostream/basic_ostream.md +++ b/reference/ostream/basic_ostream.md @@ -106,7 +106,7 @@ namespace std { - [`basic_ios`](../ios/basic_ios.md) - `basic_ostream<>`型のオブジェクト - [`cout`](../iostream/cout.md) - - [`wcout`](../iostream/wcout.md.nolink) + - [`wcout`](../iostream/wcout.md) - [`clog`](../iostream/clog.md) - [`wclog`](../iostream/wclog.md.nolink) - [`cerr`](../iostream/cerr.md) diff --git a/reference/ostream/basic_ostream/op_ostream_free.md b/reference/ostream/basic_ostream/op_ostream_free.md index f655a5dad4..fdca09f75f 100644 --- a/reference/ostream/basic_ostream/op_ostream_free.md +++ b/reference/ostream/basic_ostream/op_ostream_free.md @@ -135,7 +135,7 @@ int main() std::wcout << std::setw(10) << "cpprefjp" << std::endl; } ``` -* std::wcout[link ../../iostream/wcout.md.nolink] +* std::wcout[link ../../iostream/wcout.md] * std::left[link ../../ios/left.md] * std::setfill[link ../../iomanip/setfill.md] * std::setw[link ../../iomanip/setw.md] From b38dc9575dd753e9337798caa34b7723f4a363e0 Mon Sep 17 00:00:00 2001 From: rotarymars Date: Fri, 10 Apr 2026 16:07:15 +0900 Subject: [PATCH 2/3] new page: wcin.md --- reference/ios/basic_ios/tie.md | 4 +- reference/ios/ios_base/Init.md | 2 +- reference/ios/ios_base/Init/op_constructor.md | 4 +- reference/ios/ios_base/sync_with_stdio.md | 2 +- reference/iostream.md | 8 --- reference/iostream/cin.md | 4 +- reference/iostream/wcin.md | 53 +++++++++++++++++++ reference/istream/basic_istream.md | 2 +- 8 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 reference/iostream/wcin.md diff --git a/reference/ios/basic_ios/tie.md b/reference/ios/basic_ios/tie.md index 748634f96b..66838b182d 100644 --- a/reference/ios/basic_ios/tie.md +++ b/reference/ios/basic_ios/tie.md @@ -39,7 +39,7 @@ basic_ostream* tie(basic_ostream* tiestr); // ( なお、この要件は「`tie` に設定した後でこのようになってはいけない」という意味であるものと思われる。(さもないと、設定したことによって無限ループが生じることを防げない) - 標準入出力ストリームは、以下のような設定が行われている。 - [`cin`](../../iostream/cin.md)`.tie() == &`[`cout`](../../iostream/cout.md) - - [`wcin`](../../iostream/wcin.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md) + - [`wcin`](../../iostream/wcin.md)`.tie() == &`[`wcout`](../../iostream/wcout.md) - [`cerr`](../../iostream/cerr.md)`.tie() == &`[`cout`](../../iostream/cout.md)(C++11 から) - [`wcerr`](../../iostream/wcerr.md.nolink)`.tie() == &`[`wcout`](../../iostream/wcout.md)(C++11 から) @@ -101,7 +101,7 @@ new - [`cin`](../../iostream/cin.md) - [`cout`](../../iostream/cout.md) - [`cerr`](../../iostream/cerr.md) -- [`wcin`](../../iostream/wcin.md.nolink) +- [`wcin`](../../iostream/wcin.md) - [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`basic_istream`](../../istream/basic_istream.md)`::`[`sentry`](../../istream/basic_istream/sentry.md)`::`[`sentry`](../../istream/basic_istream/sentry/op_constructor.md) diff --git a/reference/ios/ios_base/Init.md b/reference/ios/ios_base/Init.md index fa3092d33d..4311d7ed9a 100644 --- a/reference/ios/ios_base/Init.md +++ b/reference/ios/ios_base/Init.md @@ -45,7 +45,7 @@ namespace std { - [`cout`](../../iostream/cout.md) - [`cerr`](../../iostream/cerr.md) - [`clog`](../../iostream/clog.md) -- [`wcin`](../../iostream/wcin.md.nolink) +- [`wcin`](../../iostream/wcin.md) - [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`wclog`](../../iostream/wclog.md.nolink) diff --git a/reference/ios/ios_base/Init/op_constructor.md b/reference/ios/ios_base/Init/op_constructor.md index 071bd15ba8..d956bba0be 100644 --- a/reference/ios/ios_base/Init/op_constructor.md +++ b/reference/ios/ios_base/Init/op_constructor.md @@ -14,7 +14,7 @@ Init(); ## 効果 `Init` クラスのオブジェクトを構築する。 -[`cin`](../../../iostream/cin.md)、[`cout`](../../../iostream/cout.md)、[`cerr`](../../../iostream/cerr.md)、[`clog`](../../../iostream/clog.md)、[`wcin`](../../../iostream/wcin.md.nolink)、[`wcout`](../../../iostream/wcout.md)、[`wcerr`](../../../iostream/wcerr.md.nolink)、[`wclog`](../../../iostream/wclog.md.nolink) の 8 つのオブジェクトが構築・初期化されていなければ、それらの構築・初期化を行う。 +[`cin`](../../../iostream/cin.md)、[`cout`](../../../iostream/cout.md)、[`cerr`](../../../iostream/cerr.md)、[`clog`](../../../iostream/clog.md)、[`wcin`](../../../iostream/wcin.md)、[`wcout`](../../../iostream/wcout.md)、[`wcerr`](../../../iostream/wcerr.md.nolink)、[`wclog`](../../../iostream/wclog.md.nolink) の 8 つのオブジェクトが構築・初期化されていなければ、それらの構築・初期化を行う。 ## バージョン @@ -34,7 +34,7 @@ Init(); - [`cout`](../../../iostream/cout.md) - [`cerr`](../../../iostream/cerr.md) - [`clog`](../../../iostream/clog.md) -- [`wcin`](../../../iostream/wcin.md.nolink) +- [`wcin`](../../../iostream/wcin.md) - [`wcout`](../../../iostream/wcout.md) - [`wcerr`](../../../iostream/wcerr.md.nolink) - [`wclog`](../../../iostream/wclog.md.nolink) diff --git a/reference/ios/ios_base/sync_with_stdio.md b/reference/ios/ios_base/sync_with_stdio.md index 1f145092f9..a8f64d0e94 100644 --- a/reference/ios/ios_base/sync_with_stdio.md +++ b/reference/ios/ios_base/sync_with_stdio.md @@ -60,7 +60,7 @@ int main() - [`cout`](../../iostream/cout.md) - [`cerr`](../../iostream/cerr.md) - [`clog`](../../iostream/clog.md) - - [`wcin`](../../iostream/wcin.md.nolink) + - [`wcin`](../../iostream/wcin.md) - [`wcout`](../../iostream/wcout.md) - [`wcerr`](../../iostream/wcerr.md.nolink) - [`wclog`](../../iostream/wclog.md.nolink) diff --git a/reference/iostream.md b/reference/iostream.md index 883b17c58f..dd9a457dcf 100644 --- a/reference/iostream.md +++ b/reference/iostream.md @@ -22,15 +22,7 @@ | [`cout`](iostream/cout.md) | マルチバイト文字による標準出力 | | | [`clog`](iostream/clog.md) | マルチバイト文字による標準エラー出力 | | | [`cerr`](iostream/cerr.md) | マルチバイト文字による標準エラー出力(バッファリング無し) | | -<<<<<<< HEAD -| [`wcin`](iostream/cin.md) | ワイド文字による標準入力 | | -| [`wcout`](iostream/cout.md) | ワイド文字による標準出力 | | -||||||| parent of 36310447d (temp) -| [`wcin`](iostream/wcin.md) | ワイド文字による標準入力 | | -| [`wcout`](iostream/cout.md) | ワイド文字による標準出力 | | -======= | [`wcin`](iostream/wcin.md) | ワイド文字による標準入力 | | | [`wcout`](iostream/wcout.md) | ワイド文字による標準出力 | | ->>>>>>> 36310447d (temp) | [`wclog`](iostream/clog.md) | ワイド文字による標準エラー出力 | | | [`wcerr`](iostream/cerr.md) | ワイド文字による標準エラー出力(バッファリング無し) | | diff --git a/reference/iostream/cin.md b/reference/iostream/cin.md index c4f755b890..d0cfadb7e5 100644 --- a/reference/iostream/cin.md +++ b/reference/iostream/cin.md @@ -6,11 +6,9 @@ ```cpp namespace std { extern istream cin; - extern wistream wcin; } ``` * istream[link ../istream/basic_istream.md] -* wistream[link ../istream/basic_istream.md] ## 概要 `cin` は、標準入力に対する入力ストリームオブジェクトである。 @@ -20,7 +18,7 @@ namespace std { 本オブジェクトは、初期化が完了すると [`tie`](../ios/basic_ios/tie.md)`()` が `&`[`cout`](cout.md) を返すようになる。 その他の状態は、[`basic_ios`](../ios/basic_ios.md)`::`[`init`](../ios/basic_ios/init.md) の事後条件と同様である。 -`cin`は`character input`を意味する。また`wcin`は`wide character input`を意味する。[1] +`cin`は`character input`を意味する。 ## 例 ```cpp example diff --git a/reference/iostream/wcin.md b/reference/iostream/wcin.md new file mode 100644 index 0000000000..f4f24f37a7 --- /dev/null +++ b/reference/iostream/wcin.md @@ -0,0 +1,53 @@ +# wcin +* iostream[meta header] +* std[meta namespace] +* variable[meta id-type] + +```cpp +namespace std { + extern wistream wcin; +} +``` +* wistream[link ../istream/basic_istream.md] + +## 概要 +`wcin` は、標準入力に対するワイド文字用の入力ストリームオブジェクトである。 + +すなわち、[`std::basic_streambuf`](../streambuf/basic_streambuf.md)から派生していて``の`stdin`オブジェクトに結びつけられているストリームバッファから入力を受ける。 + +本オブジェクトは、初期化が完了すると [`tie`](../ios/basic_ios/tie.md)`()` が `&`[`cout`](cout.md) を返すようになる。 +その他の状態は、[`basic_ios`](../ios/basic_ios.md)`::`[`init`](../ios/basic_ios/init.md) の事後条件と同様である。 + +`wcin`は`wide character input`を意味する。[1] + +## 例 +```cpp example +#include +#include + +int main() +{ + std::cout << "名前を入力してください: "; + + std::string s; // std::wcin.tie() == &std::wcout であるため、 + std::wcin >> s; // std::wcout を明示的に flush しなくても + // 上記の出力が flush されることが保証されている + + std::wcout << L"あなたの名前は「" << s << L"」ですね。" << std::endl; +} +``` +* std::wcin[color ff0000] + +### 出力例 +``` +名前を入力してください:たろう +あなたの名前は「たろう」ですね +``` + +## バージョン +### 言語 +- C++98 + +## 出典 + +1. **^** [Stroustrup: C++ Style and Technique FAQ](http://www.stroustrup.com/bs_faq2.html#cout)(2018-08-21 17:01 JST 閲覧) diff --git a/reference/istream/basic_istream.md b/reference/istream/basic_istream.md index 282334181a..094c4a3f98 100644 --- a/reference/istream/basic_istream.md +++ b/reference/istream/basic_istream.md @@ -145,6 +145,6 @@ syncは非書式化入力関数である。 - [`basic_ios`](../ios/basic_ios.md) - `basic_istream<>`型のオブジェクト - [`cin`](../iostream/cin.md) - - [`wcin`](../iostream/wcin.md.nolink) + - [`wcin`](../iostream/wcin.md) - [P1264R2 Revising the wording of stream input operations](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1264r2.pdf) - C++23からローカルエラー状態の概念が導入され、入力関数のエラー処理セマンティクスが明確化された From 4072d3b7746a1c91bbfd91b7f6322a9bda2f8f09 Mon Sep 17 00:00:00 2001 From: rotarymars Date: Fri, 10 Apr 2026 16:16:18 +0900 Subject: [PATCH 3/3] fixing problems --- reference/iostream/cout.md | 2 +- reference/iostream/wcin.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reference/iostream/cout.md b/reference/iostream/cout.md index 0cf533df03..3e0f19489d 100644 --- a/reference/iostream/cout.md +++ b/reference/iostream/cout.md @@ -9,7 +9,7 @@ namespace std { } ``` * ostream[link ../ostream/basic_ostream.md] -* wostream[link ../ostream/basic_ostream.md] +* ostream[link ../ostream/basic_ostream.md] ## 概要 `cout`は、標準出力に対する出力ストリームオブジェクトである。 diff --git a/reference/iostream/wcin.md b/reference/iostream/wcin.md index f4f24f37a7..7407d017e4 100644 --- a/reference/iostream/wcin.md +++ b/reference/iostream/wcin.md @@ -15,7 +15,7 @@ namespace std { すなわち、[`std::basic_streambuf`](../streambuf/basic_streambuf.md)から派生していて``の`stdin`オブジェクトに結びつけられているストリームバッファから入力を受ける。 -本オブジェクトは、初期化が完了すると [`tie`](../ios/basic_ios/tie.md)`()` が `&`[`cout`](cout.md) を返すようになる。 +本オブジェクトは、初期化が完了すると [`tie`](../ios/basic_ios/tie.md)`()` が `&`[`wcout`](wcout.md) を返すようになる。 その他の状態は、[`basic_ios`](../ios/basic_ios.md)`::`[`init`](../ios/basic_ios/init.md) の事後条件と同様である。 `wcin`は`wide character input`を意味する。[1] @@ -27,9 +27,9 @@ namespace std { int main() { - std::cout << "名前を入力してください: "; + std::wcout << L"名前を入力してください: "; - std::string s; // std::wcin.tie() == &std::wcout であるため、 + std::wstring s; // std::wcin.tie() == &std::wcout であるため、 std::wcin >> s; // std::wcout を明示的に flush しなくても // 上記の出力が flush されることが保証されている