文字列「<source lang」を「<syntaxhighlight lang」に置換
 
(同じ利用者による、間の1版が非表示)
33行目: 33行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== コンテナクラスの初期化 =====
===== コンテナクラスの初期化 =====
47行目: 47行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
std::mapクラスであれば、std::make_pair使用して更に面倒なコーディングが必要だったが、C++11では、以下のように記述できる。<br>
std::mapクラスであれば、std::make_pair使用して更に面倒なコーディングが必要だったが、C++11では、以下のように記述できる。<br>
62行目: 62行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== x.begin() / x.end()ではなくbegin(x) / end(x)を使用する =====
===== x.begin() / x.end()ではなくbegin(x) / end(x)を使用する =====
79行目: 79行目:
  std::sort(begin(iarray), end(iarray));
  std::sort(begin(iarray), end(iarray));
  std::sort(begin(ivec), end(ivec));
  std::sort(begin(ivec), end(ivec));
  </source>
  </syntaxhighlight>
<br>
<br>
===== 推論型 =====
===== 推論型 =====
99行目: 99行目:
     total += d;
     total += d;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== constexpr =====
===== constexpr =====
118行目: 118行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== スマートポインタ =====
===== スマートポインタ =====
従来のnew / deleteではなく、スマートポインタを使用する。<br>
従来のnew / deleteではなく、スマートポインタを使用する。<br>
詳細は、[[スマートポインタの使い方(unique ptr)]]、[[スマートポインタの使い方(shared ptr)]]、[[スマートポインタの使い方(weak ptr)]]を参照する。<br>
詳細は、[[C++の基礎 - スマートポインタ(unique ptr)]]、[[C++の基礎 - スマートポインタ(shared ptr)]]、[[C++の基礎 - スマートポインタ(weak ptr)]]を参照する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <memory>
  #include <memory>
129行目: 129行目:
  std::shared_ptr<std::string> pstrhoge(new(""));
  std::shared_ptr<std::string> pstrhoge(new(""));
  std::weak_ptr<double> pdhoge(new(5.0f));
  std::weak_ptr<double> pdhoge(new(5.0f));
  </source>
  </syntaxhighlight>
<br>
<br>
===== nullptr =====
===== nullptr =====
NULLの定義が0や0Lのため、オーバーロード時の評価で期待した結果が得られない問題あり、nullptrが導入された。<br>
NULLの定義が0や0Lのため、オーバーロード時の評価で期待した結果が得られない問題あり、nullptrが導入された。<br>
162行目: 163行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


181行目: 182行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  int i = 0b1100;  // i = 12
  int i = 0b1100;  // i = 12
  </source>
  </syntaxhighlight>
<br>
<br>
===== 実行時サイズの配列 =====
===== 実行時サイズの配列 =====
190行目: 191行目:
     int a[size];  // 実行時サイズの配列
     int a[size];  // 実行時サイズの配列
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
C言語とは、sizeofで値が取得できない等、細かい部分で互換性がない。<br>
C言語とは、sizeofで値が取得できない等、細かい部分で互換性がない。<br>
204行目: 205行目:
     } valis;
     } valis;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>


214行目: 215行目:
  auto f(){return 123;};  // 関数f()の定義で、戻り値の型はintとなる。
  auto f(){return 123;};  // 関数f()の定義で、戻り値の型はintとなる。
  int x = f();            // x = 123
  int x = f();            // x = 123
  </source>
  </syntaxhighlight>
<br>
<br>
===== decltype(auto) =====
===== decltype(auto) =====
223行目: 224行目:
  decltype(a) b;             // int b; と同義
  decltype(a) b;             // int b; と同義
  std::vector<decltype<a> v;  // std::vector<int> v; と同義
  std::vector<decltype<a> v;  // std::vector<int> v; と同義
  </source>
  </syntaxhighlight>
<br>
<br>
===== ジェネリックラムダ =====
===== ジェネリックラムダ =====
229行目: 230行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  [](const auto& a, const auto& b){return a > b;};
  [](const auto& a, const auto& b){return a > b;};
  </source>
  </syntaxhighlight>
<br>
<br>
また、Varadic template parameter(パラメーターパック)も使用できる。<br>
また、Varadic template parameter(パラメーターパック)も使用できる。<br>
238行目: 239行目:
  f(0,1);
  f(0,1);
  f(0,1,2,3,4,5);
  f(0,1,2,3,4,5);
  </source>
  </syntaxhighlight>
<br>
<br>
===== 一般化されたラムダキャプチャ =====
===== 一般化されたラムダキャプチャ =====
246行目: 247行目:
  auto f = [y=x, &z=x] { ... };        // xをコピーしたy, xの参照をキャプチャしたz
  auto f = [y=x, &z=x] { ... };        // xをコピーしたy, xの参照をキャプチャしたz
  auto g = [y = x + 1] { return y; };  // 2を返す
  auto g = [y = x + 1] { return y; };  // 2を返す
  </source>
  </syntaxhighlight>
<br>
<br>
ムーブキャプチャも同様にできる。<br>
ムーブキャプチャも同様にできる。<br>
252行目: 253行目:
  std::unique_ptr<int> p(new int(3));
  std::unique_ptr<int> p(new int(3));
  auto f = [q = std::move(p)]{/* 何か処理 */;};
  auto f = [q = std::move(p)]{/* 何か処理 */;};
  </source>
  </syntaxhighlight>
<br>
<br>
===== constexpr関数の制限の緩和 =====
===== constexpr関数の制限の緩和 =====
272行目: 273行目:
     return i;
     return i;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== 変数テンプレート =====
===== 変数テンプレート =====
285行目: 286行目:
     return pi<T> * hankei * hankei;
     return pi<T> * hankei * hankei;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== 軽量コンセプト =====
===== 軽量コンセプト =====
298行目: 299行目:
  long int b = 1'000'000;          // 100万
  long int b = 1'000'000;          // 100万
  long long int c = 1'000'000'000;  // 10億
  long long int c = 1'000'000'000;  // 10億
  </source>
  </syntaxhighlight>
<br>
<br>
2進数や16進数も区切ると見やすくなる。<br>
2進数や16進数も区切ると見やすくなる。<br>
304行目: 305行目:
  uint16_t a = 0b11110000'00001111;  // 1[byte]ずつ区切る
  uint16_t a = 0b11110000'00001111;  // 1[byte]ずつ区切る
  uint32_t b = 0xff'00'ff'ff;        // 1[byte]ずつ区切る
  uint32_t b = 0xff'00'ff'ff;        // 1[byte]ずつ区切る
  </source>
  </syntaxhighlight>
<br>
<br>
小数点を区切ることもできる。<br>
小数点を区切ることもできる。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  double pi = 3.14159'26535;
  double pi = 3.14159'26535;
  </source>
  </syntaxhighlight>
<br>
<br>
===== 非推奨をマークする (deprecated) =====
===== 非推奨をマークする (deprecated) =====
320行目: 321行目:
  // コメント
  // コメント
  [[deprecated("gets is deprecated. Use gets_s instead.")]]
  [[deprecated("gets is deprecated. Use gets_s instead.")]]
  </source>
  </syntaxhighlight>
<br>
<br>
例えば、「非推奨の関数」はいきなり削除はできない。<br>
例えば、「非推奨の関数」はいきなり削除はできない。<br>