C++11
提供: C++入門
スポンサーリンク
C++11 とは、2011年での最新のC++言語のISO標準です。言語の機能追加や標準C++ライブラリの拡張を行っています。g++やclang++で利用できます。新しい機能を利用するためには、新しいコンパイラが必要な場合があります。
読み方
- C++11
- しーぷらすぷらす じゅういち
概要
C++11の拡張やライブラリを使用するためには、新しいコンパイラが必要になります。また、コンパイラによっては、C++11の機能を使うために、明示的にオプションで指定する必要があります。
以下は、コンパイルオプションの例です。
g++49 -std=c++11 foo.cc g++48 -std=c++11 foo.cc clang++ -std=c++11 foo.cc
FreeBSDのベースシステム以外のg++では、rpathを指定してコンパイルする必要があります。
g++49 -std=c++11 -Wl,-rpath=/usr/local/lib/gcc49/ foo.cc
それぞれコンパイラのオプションについては、g++やclang++をご参照ください。
クラスの初期化
従来は、このようにクラスの初期化を定義できませんでした。
#include <iostream> using namespace std; class C { int i; public: C (int ia) : i(ia) {} C () : C (123) {} }; int main(int argc, char const* argv[]) { C c; return 0; }
コンパイル方法は、以下の通りです。
clang++ constractor1.cpp -std=c++11
従来のコンパイラ・コンパイルモードでは、以下のエラーになります。 clang++では、C++11でのみ許可されると説明しています。
% g++ constractor1.cpp constractor1.cpp: In constructor 'C::C()': constractor1.cpp:7: error: type 'C' is not a direct base of 'C' % clang++ constractor1.cpp constractor1.cpp:7:9: error: delegating constructors are permitted only in C++11 C () : C (123) {} ^ 1 error generated.
コンテナクラスの初期化
クラスでも初期化リストを扱えるように、std::initializer_listを追加されました。 従来では、std::vectorは、初期化リストを指定できず、push_back()で初期化するなどのコーディングを必要としていました。
しかし、C++11では、こんなに簡単です。
#include <vector> using namespace std; int main(int argc, char const* argv[]) { vector<int> v = {1,2,3}; return 0; }
std::mapであれば、std::make_pairでさらに面倒なコーディングが必要でした。 しかし、C++11では、こんなに簡単です。
#include <map> #include <string> using namespace std; int main(int argc, char const* argv[]) { map<string,int> m = { {"foo",1}, {"bar",2}, }; return 0; }
推論型
関連項目
- nullptr / std::nullptr_t
- std::initializer_list
- clang++
- g++
- POD
- ラムダ式
- std::system_error
- std::iota
- C++14
ツイート
スポンサーリンク