「C++11」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「C++11 とは、2011年での最新のC++言語のISO標準です。言語の機能追加や標準C++ライブラリの拡張を行っています。 '''読...」)
 
行51: 行51:
 
               ^
 
               ^
 
1 error generated.
 
1 error generated.
 +
</syntaxhighlight>
 +
 +
== コンテナクラスの初期化 ==
 +
[[クラス]]でも初期化リストを扱えるように、[[std::initializer_list]]を追加されました。
 +
従来では、[[std::vector]]は、初期化リストを指定できず、push_back()で初期化するなどのコーディングを必要としていました。
 +
 +
しかし、[[C++11]]では、こんなに簡単です。
 +
<syntaxhighlight lang="cpp">
 +
#include <vector>
 +
using namespace std;
 +
int main(int argc, char const* argv[])
 +
{
 +
        vector<int> v = {1,2,3};
 +
        return 0;
 +
}
 +
</syntaxhighlight>
 +
[[std::map]]であれば、std::make_pairでさらに面倒なコーディングが必要でした。
 +
しかし、[[C++11]]では、こんなに簡単です。
 +
<syntaxhighlight lang="cpp">
 +
#include <map>
 +
#include <string>
 +
using namespace std;
 +
int main(int argc, char const* argv[])
 +
{
 +
        map<string,int> m = {
 +
                {"foo",1},
 +
                {"bar",2},
 +
        };
 +
        return 0;
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
行58: 行88:
  
 
== 関連項目 ==
 
== 関連項目 ==
 +
* [[std::initializer_list]]
 
* [[clang++]]
 
* [[clang++]]
 
* [[g++]]
 
* [[g++]]
<!--
+
* [[POD]]
vim: filetype=mediawiki
+
* [[ラムダ式]]
-->
+
<!-- vim: filetype=mediawiki -->

2013年12月27日 (金) 18:31時点における版

C++11 とは、2011年での最新のC++言語のISO標準です。言語の機能追加や標準C++ライブラリの拡張を行っています。

読み方

C++11
しーぷらすぷらす じゅういち

概要

C++11の拡張やライブラリを使用するためには、新しいコンパイラが必要になります。また、コンパイラによっては、C++11の機能を使うために、明示的にオプションで指定する必要があります。

以下は、コンパイルオプションの例です。

g++48 -std=c++11 foo.cc
clang -std=c++11 foo.cc

クラスの初期化

従来は、このようにクラスの初期化を定義できませんでした。

#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;
}

推論型

関連項目