なぜFooの(b)はC ++で正常にコンパイルしますか?

Sarvesh:

私は以下のコードをコンパイルする奇妙な行動があります:

class Foo {
};
int main() {
    Foo(b);
}

それも、宣言せずに正常にコンパイルbこのための任意の説明は?

songyuanyao:

それは宣言そのものです。これは、名前の変数を宣言bタイプとのFooと同じ効果、すなわち、Foo b;

【stmt.ambig] / 1

関連する文法におけるあいまいさがあり式文 S宣言 sが式文関数スタイル明示的な型変換の一番左の部分式としては区別がつかないことができ宣言最初宣言子で始まります(そのような場合にステートメントがある宣言

そして[stmt.ambig] / 2

残りの症例は、宣言 S[例:

class T {
  // ...
public:
  T();
  T(int);
  T(int, int);
};
T(a);               //  declaration

...

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377258&siteId=1