C PlusPlus 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(C++からの技術)
(Cにもあった技術)
 
1行: 1行:
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。
 +
 +
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp)</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
==='''概要'''===
 
==='''概要'''===
 +
 
C++はCの仕様を基にC++独自のエッセンスを交えた言語です。Cを覚えてから、C++でCから変更されたところを知るというのがオーソドックスな勉強方法です。C++から直接勉強するのが、早いとは思うんですけど、Cの知識を抜きにして教えてくれるってことは少なかったりする。<br />
 
C++はCの仕様を基にC++独自のエッセンスを交えた言語です。Cを覚えてから、C++でCから変更されたところを知るというのがオーソドックスな勉強方法です。C++から直接勉強するのが、早いとは思うんですけど、Cの知識を抜きにして教えてくれるってことは少なかったりする。<br />
 「まぁ、覚えておいた方がいいんじゃない。」ってツンデレ系の美男、美少女に説得されたら、合点も行くのかもしれません。C言語と他の言語の比較についてですが、C言語はWindows/Mac/UNIX GUIアプリやDLLなどのライブラリ開発やマイコンやPIC操作では、よく使われるし、AndroidではJavaという感じです。WebではJavaScript、PHP、Perlがよく使われ、簡単なアプリケーションであればVisual Basic、MS OfficeマクロでもVBを基本としたVBA、電子回路工作では、アセンブラという低水準言語がよく使われます。奥深さ、難しさで言えばC言語/C++/Visual C++/Visual C++/CLIがトップレベルだと思います。Javaはそこそこ。<br />
+
 「まぁ、覚えておいた方がいいんじゃない。」ってツンデレ系の美男、美少女に説得されたら、合点も行くのかもしれません。C言語と他の言語の比較についてですが、C言語はWindows/Mac/UNIX GUIアプリやDLLなどのライブラリ開発やマイコンやPIC操作では、よく使われるし、AndroidではJavaという感じです。WebではJavaScript、PHP、Perlがよく使われ、簡単なアプリケーションであればVisual Basic、MS OfficeマクロでもVBを基本としたVBA、電子回路工作では、アセンブラという低水準言語がよく使われます。奥深さ、難しさで言えばC言語/C++/Visual C++/Visual C++/CLI C++/CX がトップレベルだと思います。Javaはそこそこ。<br />
 自分の印象としてはC++が理解できれば、他の言語を習得するのはたやすいという印象です。でも何もできあがらないまま終わるくらいなら、PerlやPHP、あるいはVBAで遊んだ方が楽しいかもしれない。電子回路工作が好きな人はPIC or マイコン or プログラム制御機器+アセンブラ+工作に適した言語で楽しむのもよいかと。今すぐお金儲けを!と思う人はJavaでAndroidアプリやObjective-CでiPhoneアプリを開発するのが近道。デザインの勉強もお忘れなく。(Objective-CはMacのためのC++って感じ。最近はMac向けにSwiftっていう言語もあるそうな。)Windows向けアプリで商売は競合も多く、大手のアプリも凄まじいので、技術的にも効率的にも複雑で一番難しいでしょうね。かなり複雑なシステムを提供しないとお金にはならないような気がするし。アイデア次第ですが。AndoroidやiPhoneなら常時携帯していて、ちょっとした便利さがあれば、アプリ購入に繋がるので規模が小さくても可能性はあると思います。課金系は集客力+デザイン力+アイテム数とアイテムとシステムの優位性のバランスが決めてですかね。単なる電子媒体データを欲しいと思わせる状況作りが大事です。やりすぎて、コンプガチャみたいな問題も生まれましたけど。IT系の野心家は電子媒体を効率よくお金に変えようとするから恐ろしい。クリエイターにもそういう人いますかね。苦労して莫大なお金を手にするのは、まぁ許されるんかもしれませんね。ちまちま稼いで生計立てるという生き方もあるわけです。いずれにせよ、どの言語を習得したとしても結局はそれぞれのOS独自のAPIやプログラムインタフェースやプログラム実装のノウハウを理解せねばならないので、よくある分厚い言語参考書をすべて理解したとしてもOS独自のノウハウはとんでもなく膨大なもので、言語の基礎に加えて広辞苑1冊くらいのOS独自の知識を習得しないと全てを自由に操ることなんてできません。修行あるのみです。画像/動画処理や通信技術やMap(GSI)合成あらゆることを網羅しようとすれば、図書館の本棚2~7列くらいの知識と数学の知識が必要になると考えてよいと思います。またプログラムを覚えたところで、インタフェースがへっぽこいと誰も使ってくれないので絵を描く才能や、デザインレイアウトの能力まで必要になります。あるいは3D技術も…。ひとりでやれること。ひとりでやれないこと。よく見極めて学習を進めて欲しいと思います。現代の情報技術リテラシーをもった上で、あーこんなことができたらいいのになぁって思った事を実現させるためには、爆発的な処理能力と体力が必要です。<br />
+
 自分の印象としてはC++が理解できれば、他の言語を習得するのはたやすいという印象です。C#はマイクロソフト仕様のC++って感じだと思ってもらえればと思います。なんつうかC++/CLIをC++に逆輸入したような言語がC#ですね。ややこしさはC++と同等だと思いますが、ややすっきりしているという印象もあるそうです。でも何もできあがらないまま終わるくらいなら、PerlやPHP、あるいはVBAで遊んだ方が楽しいかもしれない。電子回路工作が好きな人はPIC or マイコン or プログラム制御機器+アセンブラ+工作に適した言語で楽しむのもよいかと。今すぐお金儲けを!と思う人はJavaでAndroidアプリやObjective-CでiPhoneアプリを開発するのが近道。デザインの勉強もお忘れなく。(Objective-CはMacのためのC++って感じ。最近はMac向けにSwiftっていう言語もあるそうな。あとはVisualStudioでiOSアプリを開発するXamarin(ザマリン)、多様化しています。)Windows向けアプリで商売は競合も多く、大手のアプリも凄まじいので、技術的にも効率的にも複雑で一番難しいでしょうね。かなり複雑なシステムを提供しないとお金にはならないような気がするし。アイデア次第ですが。AndoroidやiPhoneなら常時携帯していて、ちょっとした便利さがあれば、アプリ購入に繋がるので規模が小さくても可能性はあると思います。課金系は集客力+デザイン力+アイテム数とアイテムとシステムの優位性のバランスが決めてですかね。単なる電子媒体データを欲しいと思わせる状況作りが大事です。やりすぎて、コンプガチャみたいな問題も生まれましたけど。IT系の野心家は電子媒体を効率よくお金に変えようとするから恐ろしい。クリエイターにもそういう人いますかね。苦労して莫大なお金を手にするのは、まぁ許されるんかもしれませんね。ちまちま稼いで生計立てるという生き方もあるわけです。いずれにせよ、どの言語を習得したとしても結局はそれぞれのOS独自のAPIやプログラムインタフェースやプログラム実装のノウハウを理解せねばならないので、よくある分厚い言語参考書をすべて理解したとしてもOS独自のノウハウはとんでもなく膨大なもので、言語の基礎に加えて広辞苑1冊くらいのOS独自の知識を習得しないと全てを自由に操ることなんてできません。修行あるのみです。画像/動画処理や通信技術やMap(GSI)合成あらゆることを網羅しようとすれば、図書館の本棚2~7列くらいの知識と数学の知識が必要になると考えてよいと思います。更には、作りたいプログラムの専門的な知識も必要です。現場百回、実際の使われ方を理解しないと使いやすいものにはなりません。人から聞いたことや仕様書だけを見ていると、使う人にとってラクだと感じないこともあります。あらゆる人の気持ちを理解したユニバーサルなデザイン。でもやっぱり作ろうとしているプログラムの分野まで拡げると、図書館丸々は理解しないと駄目かな。嫌っす。無理、無理。またプログラムを覚えたところで、インタフェースがへっぽこいと誰も使ってくれないので絵を描く才能や、デザインレイアウトの能力まで必要になります。あるいは3D技術も…。ひとりでやれること。ひとりでやれないこと。よく見極めて学習を進めて欲しいと思います。現代の情報技術リテラシーをもった上で、あーこんなことができたらいいのになぁって思った事を実現させるためには、爆発的な処理能力と体力が必要です。<br />
 
<br />
 
<br />
  
  
ちなみに自分自身は職業プログラマでは無く、趣味プログラマで、主に勉強だけやって、実際には何も作らないというスタイルでプログラムと接してきました。何かを完璧に自分で作ろうとすると、勉強することが多すぎるって感じつつ、勉強ばっかりしてるうちにおじいちゃんみたくなっていった感じです。だから世にいうデスマーチだとか大きなプロジェクトを経験したことも分業プログラムも経験したことはありません。これからプログラマになる方は、そういったことを経験したことのある偉大な人の言葉にも耳を傾けるべきだと思います。決して楽な職業ではないということですから、志し半ばにならぬように、このいばらの道を歩んでいただければと思います。そして素晴らしい情報社会を築き上げていって下さい。
+
ちなみに自分自身は職業プログラマでは無く、趣味プログラマで、主に勉強だけやって、実際には何も作らないというスタイルでプログラムと接してきました。何かを完璧に自分で作ろうとすると、勉強することが多すぎるって感じつつ、勉強ばっかりしてるうちにおじいちゃんみたくなっていった感じです。だから世にいうデスマーチだとか大きなプロジェクトを経験したことも分業プログラムも経験したことはありません。これからプログラマになる方は、そういったことを経験したことのある偉大な人の言葉にも耳を傾けるべきだと思います。決して楽な職業ではないということですから、志し半ばにならぬように、このいばらの道を歩んでいただければと思います。そして素晴らしい情報社会を築き上げていって下さい。会社では生産管理システムと連動する特定作業の進捗管理Webアプリを一人で作ったり、装置からデータを取得する通信部分やUIや、作業手数を極端に削減した自動集計するようなアプリや画像収集整列表示とか、SOAP-Javaアプレット連動の本社提供の認証機能とかの取入れとか作ったことあります。趣味の方ではラジオシャークというラジオをUSBデバイスコントロールして音を聞いたり録音したり、途中で投げ出したり、DAWのVST SDKでコードコントロールするVST作ったりしました。結局投げ出しましたけど。趣味の世界では世の中の役に立つようなアプリを提供したことはないと自負しております。管理人のプログラムセンスでは、世の中を相手にすると苦情しかこない予感。組織の中でぬくぬくと使ってもらった方が言い訳もできるし、バグだしとかもある程度いい加減でもいいし、プログラムが誰かの役に立つのは楽しいね。とくに短いプログラムが意外と有用だったりするときはラクチンでプログラム知っててよかった!ってことはある。はい、自己自慢ここまで!これ以上はどんなことをやったかは企業秘密!教えない。
 +
 
 +
 
 +
サンプルコードをスマホブラウザからみると、とてつもなく見辛いようになっています。IE最新版のみで動作チェックしているだけで記事として、投稿しています。申し訳ないです。きがむいたらGeshiのCSSの改善とかやるかもしれないですが、スマホでプログラムを勉強するのは、効率悪いですし、期待出来ないです。
  
 
==='''略語'''===
 
==='''略語'''===
47行: 54行:
 
==='''プログラム基本技術'''===
 
==='''プログラム基本技術'''===
 
制御構造(if for switch while goto…)や記述形式(; () {} 演算子 演算子優先度…)および変数の宣言や定義(int float double short unsigned volatile const static register char…)および標準入出力命令(scanf printf フォーマット記述子)のような基本的な部分の説明は省略します。
 
制御構造(if for switch while goto…)や記述形式(; () {} 演算子 演算子優先度…)および変数の宣言や定義(int float double short unsigned volatile const static register char…)および標準入出力命令(scanf printf フォーマット記述子)のような基本的な部分の説明は省略します。
 +
 +
 +
このC++の記事では、プログラムを実際に動かしてみて習得しようとすべき内容が多く含まれていますが、管理人はVisual Studio2012 Proを利用しています。したがってVisual Studio2012の基本的な利用方法を習得しているものとして、説明している節がいくつかあります。ときどき基本的ではないかもしれないと思う部分については、説明を付け加えていますが、サンプルプログラムの組み方が分からない人は、おそらくVisual Studioや各種開発環境の基本的な操作方法を習得していないことが起因していると思われます。Visual Studioの基本的な操作方法の記事はこのサイトで作成の予定ですが、基本的な操作手順について習得が必要な場合は、他サイトで習得するなりする必要があります。ご了承下さい。
 +
*[[VC PlusPlus:基本的な使い方]]
 +
 +
==='''VisualStudio2019からstdafx.hは新規プロジェクト作成をしても生成されなくなりました。'''===
 +
 サンプルプログラムの多くは過去のVisualStudioで作成し、VisualStudioは無料だし、きっとここの記事を読む人も同じ環境になっていると思っている節がありましたが、割かし、意外な変更がなされて、サンプルプログラムが動かなくなることがあるんだなと思いました。stdafx.hはもともとプリコンパイル済みヘッダファイルを纏めて記述しておくためのものだったのですが、Microsoftさんは「自分で作りなさい」っていうスタンスに変わったのかなと思います。以前だと、プロジェクトを作成すると自動でstdafx.hが作られ、main関数のあるファイルの先頭でstdafx.hがインクルードされていました。そして、stdafx.hファイルの中で主要なヘッダファイル(#include <stdio.h>とか<windows.h>とか)がさらにインクルードされていました。インクルードについては[[C ディレクティブ]]の記事を参照していただくとして、<span style = "background:linear-gradient(transparent 50%, #ff9ece 50%); font-weight:bold; ">stdafx.hがあるサンプルプログラムについては#include <cstdio>と書き換えておいてもらえれば、動作します。</span>有名なインクルードである#include <stdio.h>を使った場合でも動作しますが、stdio.hは古いヘッダファイルとなっています。むかしからある書籍のほとんどはstdio.hを読み込むような記述になっていますが、これからは#include <cstdio>を使った方がよいと思います。Windowsデスクトップウィザードというテンプレートを使ってプロジェクトを作成した場合、プリコンパイル済ヘッダファイルを使うという設定にするとpch.hというヘッダファイルが生成され、#include "pch.h"がmain関数のあるファイルの中で呼び出されるような形式になります。pch.hには何も新たにヘッダファイルを読み込む設定がなく、まったくの空のヘッダファイルになっています。自分で記述して作成することになっています。詳しくは、[[Cpp プリコンパイル済ヘッダーファイル]]の記事にも記載したいと思います。
  
 
==='''Cにもあった技術'''===
 
==='''Cにもあった技術'''===
 +
[https://www.port70.net/~nsz/c/c11/n1570.html#7.1 C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net]
 +
 +
[https://translate.google.co.jp/translate?hl=ja&tab=wT&sl=en&tl=ja&u=https%3A%2F%2Fport70.net%2F~nsz%2Fc%2Fc11%2F C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net Google翻訳] n1570.htmlを閲覧すると良いです。難しめのC言語の全体の説明書になっています。
 +
[https://www.translatetheweb.com/?ref=TVert&from=&to=en&a=https%3A%2F%2Fport70.net%2F~nsz%2Fc%2Fc11%2Fn1570.html C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net Bing翻訳]
 +
{| class="wikitable"
 +
|-
 +
| <assert.h> || <math.h> || <stdlib.h>
 +
|-
 +
| <complex.h> || <setjmp.h> || <stdnoreturn.h>
 +
|-
 +
| <ctype.h> || <signal.h> || <string.h>
 +
|-
 +
| <errno.h> || <stdalign.h> || <tgmath.h>
 +
|-
 +
| <fenv.h> || <stdarg.h> || <threads.h>
 +
|-
 +
| <float.h> || <stdatomic.h> || <time.h>
 +
|-
 +
| <inttypes.h> || <stdbool.h> || <uchar.h>
 +
|-
 +
| <iso646.h> || <stddef.h> || <wchar.h>
 +
|-
 +
| <limits.h> || <stdint.h> || <wctype.h>
 +
|-
 +
| <locale.h> || <stdio.h> ||
 +
|}
 +
 +
<span style="color:darkred;">★関連リンク★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
*[[Qt#Qtリファレンス|Qtリファレンス]]
 +
*[[Windows#MSVC_Runtimeリファレンス|MSVC Runtimeリファレンス]]
 +
 +
 +
<span style="color:darkred;">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
 
[[C プリプロセッサ]]<br />
 
[[C プリプロセッサ]]<br />
 
:[[C マクロ]]<br />
 
:[[C マクロ]]<br />
60行: 108行:
 
[[C 共有体]]<br />
 
[[C 共有体]]<br />
 
[[C ビットフィールド]]<br />
 
[[C ビットフィールド]]<br />
[[C ポインタ]]<br />
+
[[C ポインタ]] ポインタ技術だけで1冊の本がかけるくらい奥深い。<br />
 
[[C 関数ポインタ]]<br />
 
[[C 関数ポインタ]]<br />
 
[[C 文字列]]<br />
 
[[C 文字列]]<br />
71行: 119行:
  
 
==='''C++からの技術'''===
 
==='''C++からの技術'''===
赤文字の隣にあるような記事は書きかけの記事の可能性が高いです。
+
C++の規格には通称C++98/C++03/C++TR1/C++11/C++14と存在し改良が執筆時点でも進められています。VisualStudio2013および2015でもすべての規格を取り込んではいません。主にC++11とC++14のいくつかの追加された機能を取り込んでいる状態です。
 +
*[[https://msdn.microsoft.com/ja-JP/library/vstudio/hh567368(v=vs.110).aspx Visual Studio 2012 C++11対応表]]
 +
*[[https://msdn.microsoft.com/ja-JP/library/vstudio/hh567368(v=vs.120).aspx Visual Studio 2013 C++11対応表]]
 +
*[[https://msdn.microsoft.com/ja-jp/library/hh567368(v=vs.140).aspx Visual Studio 2015 C++11対応表]]
 +
 
 +
 
 +
*[[http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx Visual Studio2015Preview]]
 +
*[[https://blogs.msdn.microsoft.com/vcblog/2015/04/29/c111417-features-in-vs-2015-rc/ Visual Studio 最新規格対応表]]
 +
 
 +
 
 +
*[[https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/ Visual Studio2017 C++11/C++14/C++17/規格対応宣言 英語]]
 +
 
 +
 
 +
*[https://docs.microsoft.com/ja-jp/cpp/standard-library/cpp-standard-library-header-files?view=vs-2019 C++標準ライブラリ一覧 Powered by Microsoft]
 +
{| class="wikitable" style="white-space:nowrap;"
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | アルゴリズム
 +
| <algorithm> || <cstdlib><span style="vertical-align: super;">1-1</span> || <numeric> ||  ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | アトミック操作
 +
| <atomic><span style="vertical-align: super;">2-1</span> ||  ||  ||  ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="6" | Cライブラリラッパ
 +
| <cassert><span style="vertical-align: super;">3-1</span> || <ccomplex><span style="vertical-align: super;">4-1</span> || <cctype><span style="vertical-align: super;">5-1</span> || <cerrno> || <cfenv><span style="vertical-align: super;">6-1</span>
 +
|-
 +
| <cfloat><span style="vertical-align: super;">7-1</span> || <cinttypes><span style="vertical-align: super;">8-1</span> || <ciso646> || <climits><span style="vertical-align: super;">9-1</span> || <clocale>
 +
|-
 +
| <cmath><span style="vertical-align: super;">10-1</span> || <csetjmp><span style="vertical-align: super;">11-1</span> || <csignal><span style="vertical-align: super;">12-1</span> || <cstdalign> || <cstdarg><span style="vertical-align: super;">13-1</span>
 +
|-
 +
| <cstdbool> || <cstddef><span style="vertical-align: super;">14-1</span> || <cstdint><span style="vertical-align: super;">15-1</span> || <cstdio><span style="vertical-align: super;">16-1</span> || <cstdlib><span style="vertical-align: super;">1-2</span>
 +
|-
 +
| <cstring><span style="vertical-align: super;">17-1</span> || <ctgmath> || <ctime><span style="vertical-align: super;">18-1</span> || <cuchar><span style="vertical-align: super;">19-1</span> || <cwchar><span style="vertical-align: super;">20-1</span>
 +
|-
 +
| <cwctype><span style="vertical-align: super;">21-1</span> || || || || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 概念
 +
| <concepts> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | シーケンスコンテナ
 +
| <array> || <deque> || <forward_list> || <list> || <vector>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 順序付けされた連想コンテナ
 +
| <map> || <set> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 順序無しの連想コンテナ
 +
| <unordered_map> || <unordered_set> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | コンテナアダプタ
 +
| <queue> || <stack> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | コンテナビュー
 +
| &lt;span&gt; ||  || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | エラーと例外処理
 +
| <cassert><span style="vertical-align: super;">3-2</span> || <exception><span style="vertical-align: super;">22-1</span> || <stdexpect> || <system_error> ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="4" | 一般的なユーティリティ
 +
| <any> || <bitset> || <charconv> || <cstdlib><span style="vertical-align: super;">1-3</span> || <execution>
 +
|-
 +
| <functional> || <memory><span style="vertical-align: super;">23-1</span> || <memory_resource><span style="vertical-align: super;">24-1</span> || <optional> || <ratio><span style="vertical-align: super;">25-1</span>
 +
|-
 +
| <scoped_allocator> || <tuple> || <type_traits> || <typeindex> || <utility>
 +
|-
 +
| <variant> ||  ||  ||  || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="3" | I/Oと書式設定
 +
| <cinttypes><span style="vertical-align: super;">8-2</span> || <cstdio><span style="vertical-align: super;">16-2</span> || <filesystem> || <fstream> || <iomanip> 
 +
|-
 +
| <ios> || <iosfwd> || <iostream> || <istream> || <ostream> 
 +
|-
 +
| <sstream> || <streambuf> || <strstream> || <syncstream> || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | Iterators
 +
| <iterator> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 言語のサポート
 +
| <cfloat><span style="vertical-align: super;">7-2</span> || <climits><span style="vertical-align: super;">9-2</span> || <codecvt> || <compare> || <corroutine>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="3" |ローカリゼーション
 +
| <csetjmp><span style="vertical-align: super;">11-2</span> || <csignal><span style="vertical-align: super;">12-2</span> || <cstdarg><span style="vertical-align: super;">13-2</span> || <cstddef><span style="vertical-align: super;">14-2</span>|| <cstdint><span style="vertical-align: super;">15-2</span>
 +
|-
 +
| <cstdlib><span style="vertical-align: super;">1-4</span> || <exception><span style="vertical-align: super;">22-2</span> || <initializer_list> || <limits><span style="vertical-align: super;">9-2</span> || <new><span style="vertical-align: super;">26-1</span>
 +
|-
 +
| <typeinfo> || <version> ||  || || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |数値演算と数値
 +
| <bit> || <cfenv><span style="vertical-align: super;">6-2</span> || <cmath><span style="vertical-align: super;">10-2</span> || <complex><span style="vertical-align: super;">4-2</span> || <cstdlib><span style="vertical-align: super;">1-5</span>
 +
|-
 +
| <limits><span style="vertical-align: super;">9-3</span> || <nemeric> || <random> || <ratio><span style="vertical-align: super;">25-2</span> || <valarray>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | メモリ管理
 +
| <allocators> || <memory><span style="vertical-align: super;">23-1</span> || <memory_resource><span style="vertical-align: super;">24-2</span> || <new><span style="vertical-align: super;">26-2</span> ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |マルチスレッド
 +
| <atomic><span style="vertical-align: super;">2-2</span> || <condition_variable>|| <future> || <mutex> ||
 +
|-
 +
| <shared_mutex> || <thread>|| || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 範囲
 +
| <ranges> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 正規表現
 +
| <regex><span style="vertical-align: super;">27-1</span> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |文字列と文字データ
 +
| <cctype><span style="vertical-align: super;">5-2</span> || <cstdlib><span style="vertical-align: super;">1-6</span> || <cstring><span style="vertical-align: super;">17-2</span> || <cuchar><span style="vertical-align: super;">19-2</span> || <cwchar><span style="vertical-align: super;">20-2</span>
 +
|-
 +
| <cwctype><span style="vertical-align: super;">21-2</span> || <regex><span style="vertical-align: super;">27-2</span> || <string> || <string_view> || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 時刻
 +
| <chrono> || <ctime><span style="vertical-align: super;">18-2</span> || || ||
 +
|-
 +
|}
 +
※1-x~27-xの数字はカテゴリ別で重複しているヘッダファイルです。重複したヘッダファイル同士は同じ番号が付与されています。続く後ろの-の後ろの番号は同じヘッダファイルの通し番号です。
 +
 
 +
 
 +
 C言語をかるく勉強した程度の知識で上記の規格対応表にある新機能の説明を読んでもほとんど理解できないかもしれませんが、最初はわからなくても生きていけます。キニシナイ。こうなってるよ程度の説明です。上記のようなことを理解していくための本記事です。
 +
 
 +
□のついている項目は記事の中身が無いです。
 +
 
 +
□の隣にあるような記事は書きかけの記事の可能性が高いです。
  
 
標準入出力関数(cin cout << >> )に関する説明は省略します。
 
標準入出力関数(cin cout << >> )に関する説明は省略します。
 +
 +
<span style="color:darkred;">★関連リンク★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
*[[Qt#Qtリファレンス|Qtリファレンス]]
 +
*[[Windows#MSVC_Runtimeリファレンス|MSVC Runtimeリファレンス]]
 +
 +
 +
<span style="color:darkred;">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
 +
 +
[[Cpp 範囲に基づく for文]]<br />
 +
[[Cpp プリコンパイル済ヘッダーファイル]]
  
 
[[Cpp bool型]]<br />
 
[[Cpp bool型]]<br />
83行: 262行:
 
[[Cpp 右辺値参照]]………………………………………※ 型名&& のような指定で宣言される変数の型 例 int&& n<br />
 
[[Cpp 右辺値参照]]………………………………………※ 型名&& のような指定で宣言される変数の型 例 int&& n<br />
 
[[Cpp 引数規定値]]<br />
 
[[Cpp 引数規定値]]<br />
 +
[[Cpp インライン関数]]………………………※定義部分に処理内容を記述<br />
 +
[[Cpp 構造体 クラスの初期化]]………………………:で設定する方法<br />
 
[[Cpp クラス]]<br />
 
[[Cpp クラス]]<br />
 
[[Cpp クラス アクセス指定子]]<br />
 
[[Cpp クラス アクセス指定子]]<br />
 
[[Cpp クラス メンバ変数]]<br />
 
[[Cpp クラス メンバ変数]]<br />
 +
[[Cpp クラス メンバ変数ポインタ]] <br />
 
[[Cpp クラス メンバ関数]]<br />
 
[[Cpp クラス メンバ関数]]<br />
 
[[Cpp クラス メンバ関数ポインタ]]<br />
 
[[Cpp クラス メンバ関数ポインタ]]<br />
96行: 278行:
 
[[Cpp クラス デストラクタ]]…………………………※クラスの実体が消滅した時に呼び出される関数<br />
 
[[Cpp クラス デストラクタ]]…………………………※クラスの実体が消滅した時に呼び出される関数<br />
 
[[Cpp クラス インライン関数]]………………………※定義部分に処理内容を記述<br />
 
[[Cpp クラス インライン関数]]………………………※定義部分に処理内容を記述<br />
[[Cpp クラス オーバーロード]]………………………※引数の違いによる呼び出し関数の決定<br />
+
[[Cpp クラス オーバーロード]]………………………※引数の違いによる呼び出し関数の決定。多重定義。<br />
 
[[Cpp クラス 継承]]……………………………………※クラスの基となるクラスから引き継ぐ形式のクラス<br />
 
[[Cpp クラス 継承]]……………………………………※クラスの基となるクラスから引き継ぐ形式のクラス<br />
 
[[Cpp クラス 継承 コンストラクタ]]…………………※継承されたクラスのコンストラクタ<br />
 
[[Cpp クラス 継承 コンストラクタ]]…………………※継承されたクラスのコンストラクタ<br />
 +
[[Cpp クラス 継承 アップキャスト]]……………………※派生クラスのポインタを基底クラスのポインタに変更できる<br />
 +
 +
↑※ポリモーフィズム(多態性・多相性・多様性:Polymorphism)と呼ばれる働きのために必要な仕組みです。
 +
 +
[[Cpp クラス 仮想関数]]………………………………※実行時に関数を再定義してもよい関数を基のクラスが指定し、再定義された関数の利用の決定をする<br />
 +
 +
↑※仮想関数の関数をプログラマが記述する行為をオーバライドって言います。オーバロードは多重定義です。
 +
 
[[Cpp クラス 継承 デストラクタ]]……………………※継承されたクラスのデストラクタ<br />
 
[[Cpp クラス 継承 デストラクタ]]……………………※継承されたクラスのデストラクタ<br />
 +
[[Cpp クラス 抽象クラス]]……………………………※必ず再定義する必要がある関数を基のクラスが指定している関数。<span style="color:deeppink;">純粋仮想関数</span>。<br />
 
[[Cpp クラス 多重継承]]………………………………※複数のクラスが継承される形式のクラス:直列型および並列型<br />
 
[[Cpp クラス 多重継承]]………………………………※複数のクラスが継承される形式のクラス:直列型および並列型<br />
[[Cpp クラス 仮想関数]]………………………………※実行時に関数を再定義してもよい関数を基のクラスが指定し、再定義された関数の利用の決定をする<br />
+
[[Cpp クラス 仮想基本クラス]] □………………………※クラスの継承によって2重に継承される問題を解決する<br />
[[Cpp クラス 抽象クラス]]……………………………※必ず再定義する必要がある関数を基のクラスが指定している関数。純粋仮想関数。<br />
+
[[Cpp クラス フレンド]] □………………………………※フレンドで定義した関数やクラスは非公開の関数や変数にアクセスできる。<br />
[[Cpp クラス 仮想基本クラス]]………………………※クラスの継承によって2重に継承される問題を解決する<br />
+
[[Cpp クラス 継承 アクセス指定子]] □………………※継承におけるアクセス指定子の振る舞いについて<br />
[[Cpp クラス フレンド]]………………………………※フレンドで定義した関数やクラスは非公開の関数や変数にアクセスできる。<br />
+
[[Cpp テンプレート]] □…………………………………※汎用データ型の関数の定義<br />
[[Cpp テンプレート]]…………………………………※汎用データ型の関数の定義<br />
+
[[Cpp クラス テンプレート]] □…………………………※汎用データ型のクラスの定義<br />
[[Cpp クラス テンプレート]]…………………………※汎用データ型のクラスの定義<br />
+
[[Cpp クラス 構造体 共有体]] □………………………※クラスを利用した構造体や共有体<br />
[[Cpp クラス 構造体 共有体]]………………………※クラスを利用した構造体や共有体<br />
+
[[Cpp ラムダ式]] [キャプチャ](引数)->戻り値{プログラム} C++11からの技術です。引数部分ラムダ式を使うことで引数部にプログラムを記述することもできるようになります。<br />
[[Cpp 演算子のオーバーロード]]……………………※演算子の動作の追加定義<br />
+
[[Cpp 演算子のオーバーロード]] □……………………※演算子の動作の追加定義<br />
[[Cpp typeid演算子]]…………………………………※実行時の型情報取得<br />
+
[[Cpp typeid演算子]] □…………………………………※実行時の型情報取得<br />
[[Cpp 例外処理]]………………………………………※try throw catchによるエラー管理<br />
+
[[Cpp 例外処理]] □………………………………………※try throw catchによるエラー管理<br />
[[Cpp 名前マングリング]]………………………………※名前空間で同名の関数を利用できるCpp独自の関数名生成、言語間利用時注意<br />
+
[[Cpp 名前マングリング]] □………………………………※名前空間で同名の関数を利用できるCpp独自の関数名生成、言語間利用時注意<br />
 +
[[Cpp STL]] □……………………………………………※STL=Standard Template library 標準テンプレートライブラリ<br />
  
 
==='''C++実装技術'''===
 
==='''C++実装技術'''===
[[Cpp クラス実装例]]
+
[[Cpp クラス実装例]]
 +
 
 +
 
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。

2022年2月9日 (水) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス