C++
C++は、標準C言語のソースコードと互換性がありつつも、標準C言語にはない新たな機能が加えられたプログラム言語のひとつです。C++も標準C言語もシステムプログラミング言語です。システムプログラミング言語とは、オペレーティングシステム(OS)を開発することのできる高級言語という意味です。高級言語とはアセンブリ言語や機械語以外の、いわゆる普通のプログラミング言語です。
初心者むけの内容
目次
- はじめに
(2017-07-18) (コンパイラのインストールと動作確認、言語の特徴、など)
- 文法の基礎 (コンパイルから実行までの流れ、拡張子cpp、出力コマンドcout、実行ファイルa.out、オブジェクトファイル、など)
(※ 編集者へ: 記事『C言語』に、下記の単元とほぼ同様の単元があります。著作時の参考にしてください。)
中級〜上級者むけの内容
目次
- C++特有の概念
(2017-07-18) (オブジェクト指向、コンソール入出力 cout, cin など)
- C++のキーワード一覧
(2016-08-18)
- クラスの定義や継承
(2016-08-18)
- オブジェクトの配列とポインタ及び参照
(2016-08-18)
- 関数オーバーロード
- 演算子オーバーロード
- C++の入出力システム
- 仮想関数
- テンプレート
(2016-08-18)
- 例外処理
- 名前空間
(2016-08-18)
- 標準テンプレートライブラリ(STL)
(2016-08-18)
- C言語/おわりに ※ 諸般の事情でリンクします。
上級者むけ
未分類
属性構文
C++11以降、コンパイラに追加情報を送ることのできる属性構文が追加された。
C++11以前にも、Visual Studio や gcc など各コンパイラごとに類似の機能がそれぞれ別々にあったが、しかしC++規格としては統一されておらずにコンパイラごとに書式の異なる状況であった。
しかしC++11以降から、下記のような、いくつもの属性構文が国際規格に導入されていっているので、今後はC++規格にもとづく属性構文を用いることが望ましい。
fallthrough属性
属性構文のひとつの fallthrough
により、意図したフォールスルーである事をコンパイラに送ることができ、break忘れの警告を抑える事ができる。
コード例
//例 1ケタの素数を判定するプログラム
#include <stdio.h>
int main(void) {
printf("一桁の数値を入力してください。:");
int i;
scanf("%d", &i);
switch (i) {
case 2:
[[fallthrough]];
case 3:
[[fallthrough]];
case 5:
[[fallthrough]];
case 7:
printf("入力値は一桁の素数\n");
break;
default:
printf("入力値は一桁の素数ではない\n");
break;
}
}
このように、 case 節の最後に attribute
を追加する。
deprecated 属性
コンパイルに、廃止などの予定される古い関数が呼び出された時に、警告を発してコンパイルを止める事のできる deprecated 属性がc++14で導入された。
コード例
#include <iostream>
#include <stdio.h>
// 新しいほう
void sin_kansu() {
printf("goog morning\n");
}
// ↓古いほう
[[deprecated("hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。")]]
void hurui_kansu() {
printf("hello\n");
}
int main()
{
hurui_kansu();
return 0;
}
このように、廃止される関数の直前に deprecated
をつける。
- 実行結果の例
g++ でコンパイルした場合、ファイル名が「at.cpp」なら、
at.cpp: 関数 ‘int main()’ 内: at.cpp:19:15: 警告: ‘void hurui_kansu()’ is deprecated: hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。 [-Wdeprecated-declarations] 19 | hurui_kansu(); | ^ at.cpp:13:6: 備考: ここで宣言されています 13 | void hurui_kansu() { |
のように表示される。
なお、コード中からdeprecated
に相当する部分を除去すると、エラーはでなくなり、コンパイルは通るようになる。
#include <iostream>
#include <stdio.h>
// 新しいほう
void sin_kansu() {
printf("goog morning\n");
}
// ↓古いほう
// [[deprecated("hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。")]]
void hurui_kansu() {
printf("hello\n");
}
int main()
{
hurui_kansu();
return 0;
}
- 実行結果
hello
maybe_unused 属性
未使用の要素(変数または関数またはクラスなど)を、意図的に残していることを明示して、未使用関係の警告を抑える。
コード例
#include <iostream>
#include <stdio.h>
int main()
{
int a = 5;
[[maybe_unused]] int b = 2; // これが未使用
printf("%d \n", a);
return 0;
}
- 実行結果
5
と表示される。