「C++11」の版間の差分
提供: C++入門
(→関連項目) |
(→概要) |
||
行11: | 行11: | ||
以下は、コンパイルオプションの例です。 | 以下は、コンパイルオプションの例です。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
+ | g++49 -std=c++11 foo.cc | ||
g++48 -std=c++11 foo.cc | g++48 -std=c++11 foo.cc | ||
− | clang -std=c++11 foo.cc | + | clang++ -std=c++11 foo.cc |
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | FreeBSDのベースシステム以外の[[g++]]では、rpathを指定してコンパイルする必要があります。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | g++49 -std=c++11 -Wl,-rpath=/usr/local/lib/gcc49/ foo.cc | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | それぞれコンパイラのオプションについては、[[g++]]や[[clang++]]をご参照ください。 | ||
== クラスの初期化 == | == クラスの初期化 == |
2014年7月6日 (日) 01:21時点における版
C++11 とは、2011年での最新のC++言語のISO標準です。言語の機能追加や標準C++ライブラリの拡張を行っています。
読み方
- 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