4

C++11 で auto キーワードを使用することに興味があります。

関数定義の場合、関数の戻り値の型を記述する必要があります。

auto f (int x) -> int { return x + 3; }; //success
auto f (int x)  { return x + 3; }; //fail

ただし、この例では両方とも機能します。

auto f = [](int x) { return x + 3; }; //expect a failure but it works
auto f = [](int x) -> int { return x + 3; }; // this is expected code

ありがとう。

4

2 に答える 2

6

C ++ 11では、ラムダ式は、あいまいさなしに正確なものを推測できる場合、その戻り型を省略できます。ただし、このルールは通常の関数には適用されません。

int f() { return 0; } // a legal C++ function

auto f() -> int { return 0; } // a legal C++ function only in C++11

auto f() { return 0; } // an illegal C++ function even if in C++11
于 2013-03-14T13:18:11.310 に答える
1
  1. "->" の後に戻り値の型を指定する必要がある場合 (C+11 の場合と同様)、関数宣言で "auto" を使用するポイントは何ですか? これは、「この関数は何でも返すことができますが、実際にはこの型だけです」と言っているようなものです。え?

  2. 次に、「->」の後に戻り値の型を指定する必要がない場合 (C++14 のように): 関数のソース コードではなく、オブジェクト ファイルとヘッダーがあるとします。関数が返すもの (戻り値の型) をどのように知ることができますか?

これまでのところ、関数宣言での「auto」は、読み取り不能なコードを記述するもう 1 つの方法のようです。あたかも C++ のように、それを行う方法はまだ十分ではありません。

関数本体の "auto" の内部は、優れた "syntax sugar" です。

または、何か不足していますか?

于 2015-09-04T12:44:38.670 に答える