14

autoキーワードを使用して異なる型の複数の変数を宣言することは許可されていないようです。ただし、それを妨げる標準の文言がわかりません。

auto i = 1, j = 1.0; //deduction failure (several compilers)

decl-specifier-specが 1 つしかないので、歴史的に理解しています。ただし、標準のルールは、autoそれぞれに異なるタイプになる可能性があることを排除していないようであり、実際には推奨しています。次の段落を検討してください。

8-3 宣言内の各init-declaratorは、それ自体が宣言内にあるかのように個別に分析されます。

7.1.6.4-7 宣言子のリストに複数の宣言子が含まれる場合、宣言された各変数の型は上記のように決定されます。[...]

autoすべての変数が同じ型である必要がない場合でも、特定の修飾子など*を各宣言子に個別に適用できます。私には、言葉遣いにより、各auto宣言子を完全に異なる型にすることができるようになりました。

これを禁止するのはどの段落ですか。

4

2 に答える 2

2

修正された文言を見つけました (最終 ドラフトと公式規格で実際に異なる文言の 1 つです)。

7.1.6.4-7 宣言子のリストに複数の宣言子が含まれる場合、宣言された各変数の型は上記のように決定されます。テンプレート パラメーター U に対して推定される型が各推定で同じでない場合、プログラムは不適切な形式です。

ここで、「U」は前の段落で、各パラメーターの推定に使用される発明された型であると説明されています。非常に優れた機能だったので、ドラフトへの変更は残念です。(ただし、std::initializer_list も扱っているため、標準の前の段落も誤解している可能性があります)

于 2013-05-20T04:10:00.190 に答える