16

C++11 では、次のような方法で「型エイリアス」を作成できます。

template <typename T>
using stringpair = std::pair<std::string, T>;

しかし、これは、テンプレートの typedef が次のようになると予想されるものとは異なります。

template <typename T>
typedef std::pair<std::string, T> stringpair;

ここで疑問が生じます - なぜ彼らは新しい構文を考え出す必要があったのでしょうか? typedef古い構文で機能しなかったのは何ですか?

最後のビットがコンパイルされないことはわかっていますが、なぜコンパイルできないのでしょうか?

4

4 に答える 4

0

新しい構文のもう 1 つの理由は、関数、配列、および同様の構造の typedef がもう少しわかりやすくなったことです。

前/後の配列への参照:

typedef int(&my_type)[3];
using my_type = int(&)[3];

前/後の関数ポインタの配列:

typedef void(*my_type[3])();
using my_type = void(*[3])();
于 2013-10-17T23:35:29.007 に答える