4

ではどのようにauto実装されていC++11ますか? 私は以下を試しましたが、それはで動作しますC++11

auto a = 1;
// auto = double
auto b = 3.14159;
// auto = vector<wstring>::iterator
vector<wstring> myStrings;
auto c = myStrings.begin();
// auto = vector<vector<char> >::iterator
vector<vector<char> > myCharacterGrid;
auto d = myCharacterGrid.begin();
// auto = (int *)
auto e = new int[5];
// auto = double
auto f = floor(b);

これがプレーンを使用してどのように達成できるかを確認したいC++

4

4 に答える 4

11

関数テンプレートで型推定に使用するのとほぼ同じことを行います。たとえば、次のようになります。

auto x = 1;

以下と同じようなことをします:

template <class T>
T function(T x) { return input; }

function(1);

コンパイラは、パラメータとして渡す式の型を把握し、そこから適切な型で関数テンプレートをインスタンス化する必要があります。これから始めると、decltype基本的にはT、このテンプレートにautoあるものを提供しており、このテンプレートにあるものを提供していxます。

テンプレートの型推定との類似性により、委員会が言語を受け入れやすくなったのではないかと思いautoますdecltype。基本的には、関数テンプレートに既に必要な型推定にアクセスする新しい方法を追加するだけです。

于 2012-04-18T08:12:49.070 に答える
7

C ++では、すべての式にがあります。たとえば、(4+5*2)はに等しい値を持ち14、タイプが。である式ですint。だからあなたがこれを書くとき:

auto v = (4+5*2);

コンパイラは右側の式のautoを検出し、検出された型に置き換えます(一部の例外を除いて、コメントを読み取ります) 。次のようになります。

int v = (4+5*2); //or simply : int v = 14;

同様に、

auto b = 3.14159; //becomes double b = 3.14159;

auto e = new int[5]; //becomes int* e = new int[5];

等々

于 2012-04-18T07:58:10.563 に答える
1

キーワードは、auto値に基づいて型を設定しながら、変数を宣言する方法にすぎません。

だからあなたの

auto b = 3.14159;

bがdoubleであることを認識します。

詳細についてautoは、次の参考資料をご覧ください。

C ++ Little Wonders:C++11の自動キーワードredux

C++0x自動キーワード

于 2012-04-18T07:59:34.840 に答える
1

以前と同じように機能します:)

次のようなコンパイラ エラーに遭遇したことはありませんか。

エラー:const char*からへの無効な変換int

このようなコード フラグメントの場合:int i = "4";

コンパイラが符号autoの右側にある式の型を認識し、=それを再利用して宣言する変数を型付けするという事実を利用するだけです。

于 2012-04-18T09:07:47.407 に答える