細 文字列「<source lang」を「<syntaxhighlight lang」に置換 |
|||
| (同じ利用者による、間の1版が非表示) | |||
| 33行目: | 33行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== コンテナクラスの初期化 ===== | ===== コンテナクラスの初期化 ===== | ||
| 47行目: | 47行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </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; | ||
} | } | ||
</ | </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)); | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 推論型 ===== | ===== 推論型 ===== | ||
| 99行目: | 99行目: | ||
total += d; | total += d; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== constexpr ===== | ===== constexpr ===== | ||
| 118行目: | 118行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== スマートポインタ ===== | ===== スマートポインタ ===== | ||
従来のnew / deleteではなく、スマートポインタを使用する。<br> | 従来のnew / deleteではなく、スマートポインタを使用する。<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)); | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== nullptr ===== | ===== nullptr ===== | ||
NULLの定義が0や0Lのため、オーバーロード時の評価で期待した結果が得られない問題あり、nullptrが導入された。<br> | NULLの定義が0や0Lのため、オーバーロード時の評価で期待した結果が得られない問題あり、nullptrが導入された。<br> | ||
| 162行目: | 163行目: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 181行目: | 182行目: | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
int i = 0b1100; // i = 12 | int i = 0b1100; // i = 12 | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 実行時サイズの配列 ===== | ===== 実行時サイズの配列 ===== | ||
| 190行目: | 191行目: | ||
int a[size]; // 実行時サイズの配列 | int a[size]; // 実行時サイズの配列 | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
C言語とは、sizeofで値が取得できない等、細かい部分で互換性がない。<br> | C言語とは、sizeofで値が取得できない等、細かい部分で互換性がない。<br> | ||
| 204行目: | 205行目: | ||
} valis; | } valis; | ||
} | } | ||
</ | </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 | ||
</ | </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; と同義 | ||
</ | </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;}; | ||
</ | </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); | ||
</ | </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を返す | ||
</ | </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)]{/* 何か処理 */;}; | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== constexpr関数の制限の緩和 ===== | ===== constexpr関数の制限の緩和 ===== | ||
| 272行目: | 273行目: | ||
return i; | return i; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 変数テンプレート ===== | ===== 変数テンプレート ===== | ||
| 285行目: | 286行目: | ||
return pi<T> * hankei * hankei; | return pi<T> * hankei * hankei; | ||
} | } | ||
</ | </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億 | ||
</ | </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]ずつ区切る | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
小数点を区切ることもできる。<br> | 小数点を区切ることもできる。<br> | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
double pi = 3.14159'26535; | double pi = 3.14159'26535; | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 非推奨をマークする (deprecated) ===== | ===== 非推奨をマークする (deprecated) ===== | ||
| 320行目: | 321行目: | ||
// コメント | // コメント | ||
[[deprecated("gets is deprecated. Use gets_s instead.")]] | [[deprecated("gets is deprecated. Use gets_s instead.")]] | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
例えば、「非推奨の関数」はいきなり削除はできない。<br> | 例えば、「非推奨の関数」はいきなり削除はできない。<br> | ||