int i;とint(i);の違いについて

色々勉強したり試したりしてて分からないことがあったので記録。

以下のようなコードなのですが

int main () {
    int(i);
    int j;
    
    return 0;
}

CでもC++でも問題なく動きます。

つまりこれは変数宣言する際に、括弧で囲っても囲まなくてもまったく同じ意味になると考えて良いんでしょうか?

また、デフォルト値の設定も可能です。

int main () {
    int(i) = 10;
    int j  = 20;
    
    return 0;
}

これもCでもC++でもちゃんと動きます。

さらにC++の場合は、コンストラクタに渡すという意味で下記のようにも書けます。intだと分かりづらいのでクラスを定義して実験してみます。

class CSample {
public:
    CSample ()    { cout << "CSample()" << endl; }
    CSample (int) { cout << "CSample(int)" << endl; }
};

int main () {
    CSample(i)(10);
    CSample j(20);
    
    return 0;
}
$ main
CSample(int)
CSample(int)

動いていますね。

同じであると思っても良いんでしょうか。あまり明確に書かれた仕様が見つからないのでちょっと不安です。