たとえば、次のような宣言:
int (x) = 0;
またはそれでも:
int (((x))) = 0;
私のコードに次のようなフラグメントがあったため、これに遭遇しました。
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
明らかにC
、デストラクタで役立つ何かを実行するオブジェクトを作成したかったのです。ただし、コンパイラは型C (y);
を使用した変数の宣言として処理するため、再定義に関するエラーが出力されます。興味深いのは、私がそれをそのように、またはそのようなものとして書くと、意図したとおりにコンパイルされるということです。もちろん、最新の最善の回避策は、コンストラクター呼び出しで使用することです。y
C
y
C (y).f ()
C (static_cast<B*> (y))
{}
そのため、後で理解したように、int (x) = 0;
またはのような変数を宣言することは可能ですが、int (((x))) = 0;
実際にこのような宣言を使用している人を見たことがありません。だから私は興味があります-今のところ、それは悪名高い「最も厄介な解析」に似たケースを作成するだけで、有用なものは何も追加しないので、そのような可能性の目的は何ですか?