SlideShare uma empresa Scribd logo
1 de 17
おそらく明日から役にたつ
C++11新機能(前編)
Kenta IDA
C++11とは
 2011年に標準化されたC++の規格の新しいバージョン
 今までのC++規格バージョン
 C++98(1998年)
 C++03(2003年)
 2014年(今年!)に新しいバージョン出る予定
 当然C++14と呼ばれることになる…はず
 2014年に出れば
C++11とは
 新しいバージョンなので…
 当然,いろいろ新機能あり
 たくさんあるので内容は書けません…
 今回は業務で役に立つと思われる機能に絞って紹介
VISUAL STUDIO 2012で使える機能
 まだC++11の全機能の一部しか実装されていない
 Visual Studio 2013では少し使える機能が増えた
 2013使いたい…
 何が使えるかはMicrosoftが情報を公開している
 http://msdn.microsoft.com/ja-jp/library/hh567368.aspx
 表で半分くらいに見えるが大きい機能の未実装多い
 多分C++の魔法使いが見たら発狂するレベル
 Variadic Tempaltesが… constexprが…
 一部業務で便利な機能も未実装
 delegating constructorsが…→2013で実装されました
VISUAL STUDIO 2012で使える機能
 Visual Studio 2012で使えるC++11機能で便利な機能
 型推論 (type inference)
 unique_ptr
 smart_ptr
 範囲ベースのfor-loop (range based for-loop)
 長くなるので今回はやめました
 iteratorの説明とか無理…
型推論 (TYPE INFERENCE)
 変数の型をコンパイラに計算させる機能
 変数の型が複雑な時に有効
 C++のテンプレートを使うと型名が複雑になるので書いてられない…
 変数宣言時の型名に”auto”と書く
 例:
auto i = 123; // iはint型
auto s = “hoge”; // sはchar*型
vector<int> v;
auto it = v.begin(); // itはvector<int>::iterator型
// (v.begin()の戻り値の型)
vector<int>::iterator it = v.begin(); // ↑はこれと等価
型推論 (TYPE INFERENCE)
 よくある誤解
 型チェックされないのでバグが多くなる
→型チェックされます
auto o = new Hoge();
o = 1; // コンパイルエラー
 実行時にオーバーヘッドが増えて遅くなる
→増えません.コンパイル時に型が決るので実行時は変わらない.
auto o = new Hoge(); // Hoge* o = new Hoge();と等価
型推論 (TYPE INFERENCE)
 使いすぎ注意?
 使いすぎると型が分からなくなる危険性アリ?
 Visual Studio使ってるなら問題ない
 Intellisenseで出てきます.
 型分からなくならない.
 VS使わないから~というのは無しの方向で
 折角のMSDN Subscription高いので有効活用しましょう
UNIQUE_PTR
 ゆにーくぽいんたと読む
 スマートポインタの一種
 使わなくなったら勝手にdeleteしてくれる
 メモリ管理が楽になる
UNIQUE_PTRの使用前
class Hoge {
Fuga* fuga;
Hoge() {
this->fuga = new Fuga();
}
void DoSomething() { this->fuga->DoSomething(); }
~Hoge() {
delete this->fuga; this->fuga = NULL;
}
}
UNIQUE_PTRの使用後
class Hoge {
unique_ptr<Fuga> fuga;
Hoge() {
this->fuga.reset(new Fuga());
}
void DoSomething() { this->fuga->DoSomething(); }
~Hoge() {
// nothing to do
}
}
UNIQUE_PTR使用上の注意
 同時に1カ所からのみ参照できる
 以下のコードはNG
unique_ptr<Fuga> a(new Fuga());
{
unique_ptr<Fuga> b = a;
b.DoSomething(); // OK. bは所有権もっている
} // bが破棄される→bの中身も破棄される
a.DoSomething(); // NG. null参照
 他のunique_ptrに代入すると所有権が移動
 元のunique_ptrからは参照不可
 所有権を持つunique_ptrが破棄されるときに中のポインタがdeleteされ
る
余談
 以下の使い方はすべきで無い
void DoSomething() {
unique_ptr<Fuga> fuga(new Fuga());
fuga->DoSomething();
}
 スタックに確保すれば良い
void DoSomething() {
Fuga fuga;
fuga.DoSomething();
}
SMART_PTR
 共有可能なスマートポインタ
 同時に複数の場所から参照可能
 スマートポインタの一種
 使わなくなったら勝手にdeleteしてくれる
 unique_ptrと同じ
 メモリ管理が楽になる
SMART_PTR使用例
 unique_ptrと異なり同時に複数箇所から参照可能
 以下のコードもOK
smart_ptr<Fuga> a(new Fuga());
{
smart_ptr<Fuga> b = a;
b.DoSomething(); // OK.
}
a.DoSomething(); // OK.
 他のsmart_ptrに代入しても所有権は移動しない
 代わりに参照されている回数がカウントアップされる(参照カウンタ)
 smart_ptrが破棄されるとカウントダウンされる
 参照カウンタが0になると中身も削除される
UNIQUE_PTR/SMART_PTR使いどころ
 使わない理由は無い
 生ポインタはdelete忘れ起きる
 生ポ禁止
 unique_ptr/smart_ptrの使い分けは必要
 smart_ptrは参照カウンタの確保が必要
→構築時にオーバーヘッド
 unique_ptrで良い場合はunique_ptr
 1つのインスタンスからのみ参照される場合
 それ以外の場合はsmart_ptr
SMART_PTR余談
 生ポ禁止と言っても古いコードが云々…
 C++11じゃなくても使えます.Boostを使えば.
 BoostがないC++とかC++じゃないという話もある
 ライセンス非常に緩いので入れても問題ないのでは
 ソースコードにライセンス表記残っていればOK
 PC以外の組み込みでも使いたい
 C言語高級アセンブラで書かれていることが多い
 使えないorz

Mais conteúdo relacionado

Destaque

Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Ryo Igarashi
 
ビジュアル構文解析
ビジュアル構文解析ビジュアル構文解析
ビジュアル構文解析ichikaz3
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングryos36
 
PYNQで○○してみた!
PYNQで○○してみた!PYNQで○○してみた!
PYNQで○○してみた!aster_ism
 
Master Slide oleh Muklisin nim 2133151022 kelas B
Master Slide oleh Muklisin nim 2133151022 kelas BMaster Slide oleh Muklisin nim 2133151022 kelas B
Master Slide oleh Muklisin nim 2133151022 kelas Bmuk lisin
 
Innovations™ Magazine July - September 2014
Innovations™ Magazine July - September 2014Innovations™ Magazine July - September 2014
Innovations™ Magazine July - September 2014T.D. Williamson
 
τα μαθηματικά μέσα από τη λογοτεχνία και την
τα μαθηματικά μέσα από τη λογοτεχνία και τηντα μαθηματικά μέσα από τη λογοτεχνία και την
τα μαθηματικά μέσα από τη λογοτεχνία και τηνkaloudizoi
 
Sanipatin J. actividades y proyectos
Sanipatin J.   actividades y proyectosSanipatin J.   actividades y proyectos
Sanipatin J. actividades y proyectosJonathan Sanipatin
 
Finding an Escape from the Digital World - It's Importance & Why You Should T...
Finding an Escape from the Digital World - It's Importance & Why You Should T...Finding an Escape from the Digital World - It's Importance & Why You Should T...
Finding an Escape from the Digital World - It's Importance & Why You Should T...Thomas Wall
 
Innovations™ Magazine Q4 2014 - Chinese
Innovations™ Magazine Q4 2014 - ChineseInnovations™ Magazine Q4 2014 - Chinese
Innovations™ Magazine Q4 2014 - ChineseT.D. Williamson
 
Innovations™ Magazine Q4 2014 - Russian
Innovations™ Magazine Q4 2014 - RussianInnovations™ Magazine Q4 2014 - Russian
Innovations™ Magazine Q4 2014 - RussianT.D. Williamson
 
Transylvania live halloween-dracula-tour-transylvania-show
Transylvania live halloween-dracula-tour-transylvania-showTransylvania live halloween-dracula-tour-transylvania-show
Transylvania live halloween-dracula-tour-transylvania-showalintransylvania
 

Destaque (14)

C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
 
ビジュアル構文解析
ビジュアル構文解析ビジュアル構文解析
ビジュアル構文解析
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
PYNQで○○してみた!
PYNQで○○してみた!PYNQで○○してみた!
PYNQで○○してみた!
 
Master Slide oleh Muklisin nim 2133151022 kelas B
Master Slide oleh Muklisin nim 2133151022 kelas BMaster Slide oleh Muklisin nim 2133151022 kelas B
Master Slide oleh Muklisin nim 2133151022 kelas B
 
Innovations™ Magazine July - September 2014
Innovations™ Magazine July - September 2014Innovations™ Magazine July - September 2014
Innovations™ Magazine July - September 2014
 
τα μαθηματικά μέσα από τη λογοτεχνία και την
τα μαθηματικά μέσα από τη λογοτεχνία και τηντα μαθηματικά μέσα από τη λογοτεχνία και την
τα μαθηματικά μέσα από τη λογοτεχνία και την
 
Sanipatin J. actividades y proyectos
Sanipatin J.   actividades y proyectosSanipatin J.   actividades y proyectos
Sanipatin J. actividades y proyectos
 
Finding an Escape from the Digital World - It's Importance & Why You Should T...
Finding an Escape from the Digital World - It's Importance & Why You Should T...Finding an Escape from the Digital World - It's Importance & Why You Should T...
Finding an Escape from the Digital World - It's Importance & Why You Should T...
 
Innovations™ Magazine Q4 2014 - Chinese
Innovations™ Magazine Q4 2014 - ChineseInnovations™ Magazine Q4 2014 - Chinese
Innovations™ Magazine Q4 2014 - Chinese
 
Innovations™ Magazine Q4 2014 - Russian
Innovations™ Magazine Q4 2014 - RussianInnovations™ Magazine Q4 2014 - Russian
Innovations™ Magazine Q4 2014 - Russian
 
Transylvania live halloween-dracula-tour-transylvania-show
Transylvania live halloween-dracula-tour-transylvania-showTransylvania live halloween-dracula-tour-transylvania-show
Transylvania live halloween-dracula-tour-transylvania-show
 

Semelhante a おそらく明日から役にたつC++11新機能

Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)egtra
 
181220_ Visual Studio 2019 (Connect 2018)
181220_ Visual Studio 2019 (Connect 2018)181220_ Visual Studio 2019 (Connect 2018)
181220_ Visual Studio 2019 (Connect 2018)Madoka Chiyoda
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ慎一 古賀
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiTadahiro Ishisaka
 
C#7の新機能
C#7の新機能C#7の新機能
C#7の新機能m ishizaki
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Fujio Kojima
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み慎一 古賀
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)Akira Takahashi
 
Visual Studio 2017 RC C# まわり
Visual Studio 2017 RC C# まわりVisual Studio 2017 RC C# まわり
Visual Studio 2017 RC C# まわりmiso- soup3
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要Tatsuhiko Tanaka
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3tak9029
 
Chrome For HTML5NIGHT
Chrome For HTML5NIGHTChrome For HTML5NIGHT
Chrome For HTML5NIGHTTakuya Oikawa
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
Windows 8 cp 速攻レビュー
Windows 8 cp 速攻レビューWindows 8 cp 速攻レビュー
Windows 8 cp 速攻レビューMakoto Nishimura
 
Windows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアームWindows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアームMasuda Tomoaki
 
Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Akira Inoue
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 

Semelhante a おそらく明日から役にたつC++11新機能 (20)

Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
 
第二回東海北陸ロボコン交流会 川上プレゼン
第二回東海北陸ロボコン交流会 川上プレゼン第二回東海北陸ロボコン交流会 川上プレゼン
第二回東海北陸ロボコン交流会 川上プレゼン
 
181220_ Visual Studio 2019 (Connect 2018)
181220_ Visual Studio 2019 (Connect 2018)181220_ Visual Studio 2019 (Connect 2018)
181220_ Visual Studio 2019 (Connect 2018)
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
 
C#7の新機能
C#7の新機能C#7の新機能
C#7の新機能
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
 
Visual Studio 2017 RC C# まわり
Visual Studio 2017 RC C# まわりVisual Studio 2017 RC C# まわり
Visual Studio 2017 RC C# まわり
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3
 
Chrome For HTML5NIGHT
Chrome For HTML5NIGHTChrome For HTML5NIGHT
Chrome For HTML5NIGHT
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
Windows 8 cp 速攻レビュー
Windows 8 cp 速攻レビューWindows 8 cp 速攻レビュー
Windows 8 cp 速攻レビュー
 
Windows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアームWindows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアーム
 
Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 

Mais de Kenta IDA

M5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたM5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたKenta IDA
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介Kenta IDA
 
カスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするカスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするKenta IDA
 
Using SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonUsing SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonKenta IDA
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かすKenta IDA
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるKenta IDA
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2Kenta IDA
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめKenta IDA
 
EC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGEC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGKenta IDA
 
Windows10 IoT CoreとBLE
Windows10 IoT CoreとBLEWindows10 IoT CoreとBLE
Windows10 IoT CoreとBLEKenta IDA
 

Mais de Kenta IDA (10)

M5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたM5StackにFPGAをつないでみた
M5StackにFPGAをつないでみた
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
カスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするカスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にする
 
Using SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonUsing SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPython
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かす
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめ
 
EC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGEC2 F1 Virtual JTAG
EC2 F1 Virtual JTAG
 
Windows10 IoT CoreとBLE
Windows10 IoT CoreとBLEWindows10 IoT CoreとBLE
Windows10 IoT CoreとBLE
 

おそらく明日から役にたつC++11新機能