C++

出典: フリー教科書『ウィキブックス(Wikibooks)』
CPlusPlus から転送)
ナビゲーションに移動 検索に移動
[半保護]  このページは半保護の方針に基づき、非ログインユーザー・新規利用者の編集が制限されています。
Wikipedia
ウィキペディアC++の記事があります。

進捗状況の凡例

00%.svg 数行の文章か目次があります。
25%.svg:本文が少しあります。
50%.svg:本文が半分ほどあります。
75%.svg: 間もなく完成します。
100 percent.svg: 一応完成しています。

C++は、標準C言語のソースコードと互換性がありつつも、標準C言語にはない新たな機能が加えられたプログラム言語のひとつです。C++も標準C言語もシステムプログラミング言語です。システムプログラミング言語とは、オペレーティングシステム(OS)を開発することのできる高級言語という意味です。高級言語とはアセンブリ言語や機械語以外の、いわゆる普通のプログラミング言語です。

初心者むけの内容

目次

はじめに 進捗状況: 50% (2017-07-18) (2017-07-18) (コンパイラのインストールと動作確認、言語の特徴、など)
文法の基礎 (コンパイルから実行までの流れ、拡張子cpp、出力コマンドcout、実行ファイルa.out、オブジェクトファイル、など)

(※ 編集者へ: 記事『C言語』に、下記の単元とほぼ同様の単元があります。著作時の参考にしてください。)

記法
データ型と変数
演算子と式
関数
制御文
配列
構造体・共用体
クラス 進捗状況: 50% (2017-07-30) (2017-07-30)
前処理指令
ポインタ
配列とポインタ

中級〜上級者むけの内容

目次

C++特有の概念進捗状況: 25% (2017-07-18) (2017-07-18) (オブジェクト指向、コンソール入出力 cout, cin など)
C++のキーワード一覧進捗状況: 25% (2016-08-18) (2016-08-18)
クラスの定義や継承進捗状況: 50% (2016-08-18) (2016-08-18)
オブジェクトの配列とポインタ及び参照 進捗状況: 00% (2016-08-18) (2016-08-18)
関数オーバーロード
演算子オーバーロード
C++の入出力システム
仮想関数
テンプレート進捗状況: 25% (2016-08-18) (2016-08-18)
例外処理
名前空間進捗状況: 25% (2016-08-18) (2016-08-18)
標準テンプレートライブラリ(STL)進捗状況: 25% (2016-08-18) (2016-08-18)


C言語/おわりに ※ 諸般の事情でリンクします。

上級者むけ

More C++ Idioms

未分類

属性構文

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

と表示される。